#!/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]; } } }, });