use Benchmark; my @words = do { local @ARGV = ( 'mondo_word_list.txt' ); <> }; my %w; @w{@words} = @words; @words = keys %w; print scalar(keys %w), " words\n"; timethese( 10, { foreach_loop => \&foreach_loop, foreach_loop_novar => \&foreach_loop_novar, while_each_loop => \&while_each_loop, array => \&array, }); sub foreach_loop { for my $key ( keys %w ) { $a = $key; $b = $w{$key}; } } sub foreach_loop_novar { for ( keys %w ) { $a = $_; $b = $w{$_}; } } sub while_each_loop { while( my( $key, $val ) = each %w ) { $a = $key; $b = $val; } } sub array { for ( @words ) { $a = $_; $b = $_; } }