sub monk1 { my( $arg, @data ) = @_; ## do stuff return @results; } sub monk2 { my( $arg, @data ) = @_; ## do stuff return @results; } .... my @data = (....); cmpthese -3, { monk1 => sub{ my @results = monk1( @data ); }, monk2 => sub{ my @results = monk2( @data ); }, .... }; #### 10 items Rate sub_block_short sub_list_short sub_block_short 305975/s -- -4% sub_list_short 319968/s 5% -- #### 10 items Rate eval_block_short eval_list_short eval_block_short 322569/s -- -1% eval_list_short 325028/s 1% -- #### 10 items Rate sub_blk_sh sub_lst_sh eval_blk_sh eval_lst_sh sub_blk_sh 305975/s -- -4% -5% -6% sub_lst_sh 319968/s 5% -- -1% -2% eval_blk_sh 322569/s 5% 1% -- -1% eval_lst_sh 325028/s 6% 2% 1% -- #### 100_000 items Rate eval_blk_vl sub_blk_vl eval_lst_vl sub_lst_vl eval_blk_vl 36.4/s -- -1% -3% -4% sub_blk_vl 36.6/s 1% -- -2% -3% eval_lst_vl 37.4/s 3%* 2% -- -1% sub_list_vl 37.8/s 4% 3%* 1% -- #### #! perl -slw use strict; use Benchmark qw[ cmpthese ]; our @short = 1 .. 10; our @medium = 1 .. 100; our @long = 1 .. 1000; our @vlong = 1 .. 100_000; print "10 items"; cmpthese -3, { eval_list_short => q[ my @results = grep $_ <= 5, @short; ], eval_block_short => q[ my @results = grep{ $_ <= 5 } @short; ], sub_list_short => sub{ my @results = grep $_ <= 5, @short; }, sub_block_short => sub{ my @results = grep{ $_ <= 5 } @short; }, }; print "\n100 items"; cmpthese -3, { eval_list_medium => q[ my @results = grep $_ <= 50, @medium; ], eval_block_medium => q[ my @results = grep{ $_ <= 50 } @medium; ], sub_list_medium => sub{ my @results = grep $_ <= 50, @medium; }, sub_block_medium => sub{ my @results = grep{ $_ <= 50 } @medium; }, }; print "\n1000 items"; cmpthese -3, { eval_list_long => q[ my @results = grep $_ <= 500, @long; ], eval_block_long => q[ my @results = grep{ $_ <= 500 } @long; ], sub_list_long => sub{ my @results = grep $_ <= 500, @long; }, sub_block_long => sub{ my @results = grep{ $_ <= 500 } @long; }, }; print "\n100_000 items"; cmpthese -3, { eval_list_vlong => q[ my @results = grep $_ <= 50000, @vlong; ], eval_block_vlong => q[ my @results = grep{ $_ <= 50000 } @vlong; ], sub_list_vlong => sub{ my @results = grep $_ <= 50000, @vlong; }, sub_block_vlong => sub{ my @results = grep{ $_ <= 50000 } @vlong; }, }; __END__ C:\test>538622 10 items Rate sub_block_short sub_list_short eval_block_short eval_list_short sub_block_short 305975/s -- -4% -5% -6% sub_list_short 319968/s 5% -- -1% -2% eval_block_short 322569/s 5% 1% -- -1% eval_list_short 325028/s 6% 2% 1% -- 100 items Rate eval_block_medium sub_block_medium eval_list_medium sub_list_medium eval_block_medium 36772/s -- -1% -5% -6% sub_block_medium 37156/s 1% -- -4% -5% eval_list_medium 38546/s 5% 4% -- -1% sub_list_medium 39104/s 6% 5% 1% -- 1000 items Rate sub_block_long eval_block_long sub_list_long eval_list_long sub_block_long 3879/s -- -0% -3% -4% eval_block_long 3889/s 0% -- -2% -3% sub_list_long 3989/s 3% 3% -- -1% eval_list_long 4027/s 4% 4% 1% -- 100_000 items Rate eval_block_vlong sub_block_vlong eval_list_vlong sub_list_vlong eval_block_vlong 36.4/s -- -1% -3% -4% sub_block_vlong 36.6/s 1% -- -2% -3% eval_list_vlong 37.4/s 3% 2% -- -1% sub_list_vlong 37.8/s 4% 3% 1% --