use strict; use warnings; use Benchmark qw(cmpthese); my @list = (0..100); cmpthese (-3, { c_style => sub { for (my $i = 0; $i <= $#list; $i += 2) { $list[$i] = 'hi'; } }, slice => sub { $_ = 'hi' for @list[map {$_ * 2} 0..$#list/2] }, modulo => sub { $_ % 2 or $list[$_] = 'hi' for 0..$#list; }, doubler => sub { $list[$_ * 2] = 'hi' for 0..@list/2; }, evilgrep => sub { @list[grep{!$_&1}0..$#list]= ('hi')x@list; } }); ### RESULTS ### evilgrep 8006/s -- -5% -17% -39% -41% modulo 8453/s 6% -- -12% -35% -37% slice 9630/s 20% 14% -- -26% -29% c_style 13041/s 63% 54% 35% -- -3% doubler 13509/s 69% 60% 40% 4% --