use Benchmark 'cmpthese'; cmpthese -1, { 'shift'=> sub { my $x=shift; my $y=shift; my $z=shift; return }, 'assign'=> sub { my ($x,$y,$z)=@_; }, }; __END__ Benchmark: running assign, shift, each for at least 1 CPU seconds... assign: 2 wallclock secs ( 1.23 usr) @ 505470.78/s (n=622740) shift: 3 wallclock secs ( 1.01 usr) @ 435373.52/s (n=440598) Rate shift assign shift 435374/s -- -14% assign 505471/s 16% -- #### for (1..100) { ++$x; $x+=$y+=$z } #### Benchmark: running assign, shift, each for at least 1 CPU seconds... assign: 2 wallclock secs ( 1.08 usr ) @ 7097.97/s (n=7680) shift: 1 wallclock secs ( 1.02 usr ) @ 6973.56/s (n=7120) Rate shift assign shift 6974/s -- -2% assign 7098/s 2% -- Benchmark: running assign, shift, each for at least 1 CPU seconds... assign: 2 wallclock secs ( 1.01 usr ) @ 7587.94/s (n=7679) shift: 2 wallclock secs ( 1.08 usr ) @ 7592.04/s (n=8207) Rate assign shift assign 7588/s -- -0% shift 7592/s 0% --