#!/usr/bin/perl
use warnings;
use strict;
use Benchmark qw/:hireswallclock cmpthese/;
my @ary = (0..5);
my $len = $#ary;
my @ary2 = @ary;
print "ARRAY: @ary2\n"; # numbers -> strings
#$_ += 0 foreach @ary2; # stings -> numbers
#print "@ary\n";
cmpthese (-3, {
'intervals' => sub {
foreach my $i (0..$len-1) {
foreach my $j ($i+1..$len) {
my @permuted = @ary[0..$i-1, $j, $i+1..$j-1, $i, $j+1..$len];
}
}
},
'cross' => sub {
foreach my $i (0..$len-1) {
foreach my $j ($i+1..$len) {
my @permuted = @ary;
@permuted[$i, $j] = @permuted[$j, $i];
}
}
},
'intervals2' => sub {
foreach my $i (0..$len-1) {
foreach my $j ($i+1..$len) {
my @permuted = @ary2[0..$i-1, $j, $i+1..$j-1, $i, $j+1..$len];
}
}
},
'cross2' => sub {
foreach my $i (0..$len-1) {
foreach my $j ($i+1..$len) {
my @permuted = @ary2;
@permuted[$i, $j] = @permuted[$j, $i];
}
}
},
});
####
Rate cross2 intervals2 intervals cross
cross2 10490/s -- -2% -43% -55%
intervals2 10742/s 2% -- -42% -54%
intervals 18408/s 75% 71% -- -22%
cross 23526/s 124% 119% 28% --
####
s/iter intervals2 cross2 intervals cross
intervals2 48.2 -- -20% -63% -81%
cross2 38.6 25% -- -54% -77%
intervals 17.8 171% 117% -- -49%
cross 9.02 434% 328% 97% --