use strict; use warnings; use Benchmark qw( cmpthese ); my @a = map { int rand 10 } 1..100; my @b = map { int rand 10 } 1..100; sub perl_for { my $dummy_load; for my $i (reverse 0..$#a) { $dummy_load = $a[$i] . ' ' . $b[$i]; } 1; } sub c_style_for { my $dummy_load; for (my $i=@a; $i--; ) { $dummy_load = $a[$i] . ' ' . $b[$i]; } 1; } sub while_loop { my $dummy_load; my $i = @a; while ($i--) { $dummy_load = $a[$i] . ' ' . $b[$i]; } 1; } sub ickyb0d { my $dummy_load; for my $i (0..$#a) { $dummy_load = $a[$#a-$i] . ' ' . $b[$#a-$i]; } 1; } sub ickyb0d_ { my $dummy_load; for (0..$#a) { my $i = $#a-$_; $dummy_load = $a[$i] . ' ' . $b[$i]; } 1; } sub diotalevi { my $dummy_load; for my $i (1..@a) { $dummy_load = $a[-$i] . ' ' . $b[-$i]; } 1; } cmpthese(-3, { perl_for => \&perl_for, c_style_for => \&c_style_for, while_loop => \&while_loop, ickyb0d => \&ickyb0d, ickyb0d_ => \&ickyb0d_, diotalevi => \&diotalevi, });