for (my $i = 0; $i < 1000000; $i += 2) {$sum += $i}
####
for my $i (map {$_ * 2} 0 .. 1000000 / 2) {$sum += $i}
####
{
my $i=0;
while ($i < 1000000) {
$sum+=$i;
} continue {
$i+=2;
}
}
####
use strict;
use Benchmark qw(cmpthese);
our $sum;
cmpthese -10,{ 'foreach' => <<'CODE', 'for(;;)' => <<'MORECODE' };
$::sum=0;
for my $i (0..10_000) { $::sum+=$i; }
CODE
$::sum=0;
for (my $i=0;$i<10_000;$i++) { $::sum+=$i; }
MORECODE
__END__
Benchmark: running for(;;), foreach, each for at least 10 CPU seconds...
for(;;): 11 wallclock secs (10.61 usr + 0.00 sys = 10.61 CPU) @ 85.30/s (n=905)
foreach: 11 wallclock secs (10.63 usr + 0.00 sys = 10.63 CPU) @ 143.15/s (n=1521)
Rate for(;;) foreach
for(;;) 85.3/s -- -40%
foreach 143/s 68% --