>perl script.pl 50 Rate mrborisguy ikegami mrborisguy 2074/s -- -51% ikegami 4225/s 104% -- # Without XS. Rate mrborisguy ikegami mrborisguy 2167/s -- -91% ikegami 23688/s 993% -- # With XS. #### >perl script.pl 1700 Rate mrborisguy ikegami mrborisguy 31.0/s -- -74% ikegami 120/s 286% -- # Without XS. Rate mrborisguy ikegami mrborisguy 31.7/s -- -96% ikegami 722/s 2179% -- # With XS. #### use strict; use warnings; use Benchmark (); use List::Util (); sub mrborisguy { my @shuffled = map { $_->[1] } sort { $a->[0] <=> $b->[0] } map { [rand(),$_] } @{$_[0]}; } sub ikegami { my @shuffled = List::Util::shuffle(@{$_[0]}); } { my @data = map { [] } 1..$ARGV[0]; Benchmark::cmpthese(-3, { mrborisguy => sub { mrborisguy \@data }, ikegami => sub { ikegami \@data }, }); }