my $op = '+'; my $and_maker_5 = arbitrary_operator_maker($op, 5); my @list_5 = (1..5); timethese(1000000, { 'and_maker 5 elements cached' => sub { $and_maker_5->(@list_5); }, 'and_maker 5 elements dispatched' => sub { my $and_maker_5 = arbitrary_operator_maker($op, 5); $and_maker_5->(@list_5); }, 'multi_add 5 elements' => sub { multi_add(@list_5); }, }); Benchmark: timing 1000000 iterations of and_maker 5 elements cached, and_maker 5 elements dispatched, multi_add 5 elements... and_maker 5 elements cached: 2 wallclock secs ( 0.98 usr + 0.00 sys = 0.98 CPU) @ 1020408.16/s (n=1000000) and_maker 5 elements dispatched: 4 wallclock secs ( 2.95 usr + 0.01 sys = 2.96 CPU) @ 337837.84/s (n=1000000) multi_add 5 elements: 3 wallclock secs ( 2.53 usr + 0.01 sys = 2.54 CPU) @ 393700.79/s (n=1000000)