use Benchmark 'cmpthese'; our $n=10; our $sum=0; cmpthese (-5,{ 'grep{}' => '$sum=0; grep {$sum+=$_} 0..$n;', 'grep()' => '$sum=0; grep ($sum+=$_,0..$n);', 'map{}' => '$sum=0; map {$sum+=$_} 0..$n;', 'map()' => '$sum=0; map ($sum+=$_,0..$n);', 'for_modif' => '$sum=0; $sum+=$_ foreach 0..$n;', 'foreach' => '$sum=0; foreach my $i (0..$n) {$sum+=$i}', 'for(;;)3' => '$sum=0; for (my $i=0;$i<=$n;$i++) {$sum+=$i}', 'for(;;)2' => '$sum=0; for (my $i=0;$i++<=$n;) {$sum+=$i}', 'w{}c{}' => '$sum=0; my $i=0; while($i<=$n){$sum+=$i}continue{$i++}', 'while' => '$sum=0; my $i=0; while($i<=$n){$sum+=$i++};', }); __END__ #last two columns removed for space reasons Rate map{} grep{} map() for(;;)3 w{}c{} grep() for(;;)2 while map{} 39416/s -- -3% -21% -34% -34% -41% -45% -47% grep{} 40750/s 3% -- -18% -32% -32% -39% -44% -46% map() 49897/s 27% 22% -- -16% -17% -25% -31% -33% for(;;)3 59526/s 51% 46% 19% -- -0% -11% -18% -21% w{}c{} 59804/s 52% 47% 20% 0% -- -10% -17% -20% grep() 66614/s 69% 63% 34% 12% 11% -- -8% -11% for(;;)2 72308/s 83% 77% 45% 21% 21% 9% -- -4% while 75007/s 90% 84% 50% 26% 25% 13% 4% -- foreach 80124/s 103% 97% 61% 35% 34% 20% 11% 7% for_modif 84073/s 113% 106% 68% 41% 41% 26% 16% 12%