#/usr/bin/perl use warnings; use strict; use Benchmark qw(cmpthese); my @arr = (0,3,4,5,8,10,12,15, 1..999999); cmpthese (-2, { mapgrep => sub {map {$arr[$_]} grep {$_ & 1} 1..$#arr}, slice => sub {@arr[ grep {$_ & 1} 1..$#arr ];}, mult => sub {@arr[map {$_*2+1} 0..int(@arr/2)-1];}, grep => sub {my $ind = 0; grep {$ind++ % 2} @arr}, push => sub {my @var; push(@var, $arr[$_*2+1]) for 0..int(@arr/2)-1}, map => sub {map { $arr[$_*2+1] } 0..int(@arr/2)-1}, } ); #### ~/perl$ cat /proc/version Linux version 2.6.26.8-57.fc8 (mockbuild@x86-4.fedora.phx.redhat.com) (gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)) #1 SMP Thu Dec 18 18:59:49 EST 2008 ~/perl$ perl -v This is perl, v5.8.8 built for x86_64-linux-thread-multi ~/perl$ perl ./everyother.pl Rate mapgrep slice push mult grep map mapgrep 5.24/s -- -22% -28% -33% -34% -43% slice 6.73/s 28% -- -8% -14% -15% -27% push 7.28/s 39% 8% -- -7% -8% -21% mult 7.80/s 49% 16% 7% -- -1% -15% grep 7.92/s 51% 18% 9% 1% -- -14% map 9.22/s 76% 37% 27% 18% 16% --