#! perl use strict; use warnings; #use IO::Null; use Benchmark qw( cmpthese ); my $n = 1e4; #my $null = IO::Null->new; cmpthese 10000, { foreach_loop => \&foreach_loop, foreach_modifier => \&foreach_modifier, c_for_loop => \&c_for_loop, c_for_loop2 => \&c_for_loop2, c_for_loop3 => \&c_for_loop3, c_for_loop4 => \&c_for_loop4, }; sub foreach_loop { for my $i (-$n .. 0) { # $null->print( -$i ); 1; } } sub foreach_modifier { 1 for -$n .. 0; } sub c_for_loop { for (my $j = $n; $j >= 0; --$j) { # $null->print( $j ); 1; } } sub c_for_loop2 { for (my $j = $n; $j-- > 0; ) { # $null->print( $j ); 1; } } sub c_for_loop3 { for (my $j = $n; --$j > 0; ) { # $null->print( $j ); 1; } } sub c_for_loop4 { for (my $j = $n; --$j; ) { # $null->print( $j ); 1; } } __END__ C:\test>junk Rate c_for_loop2 c_for_loop c_for_loop3 foreach_loop c_for_loop4 foreach_modifier c_for_loop2 807/s -- -13% -38% -50% -53% -56% c_for_loop 926/s 15% -- -29% -43% -46% -50% c_for_loop3 1298/s 61% 40% -- -19% -24% -29% foreach_loop 1612/s 100% 74% 24% -- -6% -12% c_for_loop4 1707/s 111% 84% 31% 6% -- -7% foreach_modifier 1839/s 128% 99% 42% 14% 8% --