use Benchmark qw(cmpthese); my $size = 5000; my $orig = sub { for (my $i = 0; $i < ($size - 1); $i++) { for (my $j = $i + 1; $j < ($size - 1); $j++) { } } }; my $backwards = sub { for ( my $i = $size; $i--; ) { for ( my $j = $i; $j--; ) { } } }; my $foreach = sub { foreach my $i ( 0 .. $size-1 ) { foreach my $j ( $i+1 .. $size-1 ) { } } }; cmpthese ( 10 , { orig => $orig, backwards => $backwards, foreach => $foreach } );