use warnings; use strict; use Benchmark qw(cmpthese); my @counts = qw( 100 500 2500 ); my %templates = ( map => '@list = map { s/1//; $_ } @list;', new_map => 'my @newlist = map { s/1//; $_ } @list;', void_map => 'map { s/1// } @list;', foreach => 's/1// foreach @list;', for => 's/1// for @list;' ); my @tests = (); while ( my ($name, $template) = each (%templates)) { my $test = <{$name} = sub { &$test( 1 .. $count ) }; } } foreach my $count (@counts) { print "\n$count:\n"; cmpthese( 500_000/$count, $tests[$count] ); }