>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 },
});
}