Benchmark: timing 2000000 iterations of argumentative_1arg, argumentative_3args, direct_1arg, direct_3args, shifty_1arg, shifty_3args... argumentative_1arg: 16 wallclock secs (15.85 usr + 0.03 sys = 15.88 CPU) @ 125944.58/s argumentative_3args: 21 wallclock secs (19.45 usr + 0.01 sys = 19.46 CPU) @ 102774.92/s direct_1arg: 11 wallclock secs ( 9.75 usr + 0.01 sys = 9.76 CPU) @ 204918.03/s direct_3args: 12 wallclock secs (11.15 usr + 0.03 sys = 11.18 CPU) @ 178890.88/s shifty_1arg: 16 wallclock secs (16.44 usr + -0.01 sys = 16.43 CPU) @ 121728.55/s shifty_3args: 23 wallclock secs (21.91 usr + 0.02 sys = 21.93 CPU) @ 91199.27/s #### #!/usr/bin/perl -w use Benchmark; use strict; package ArgTest; sub shifty_1arg { my $this = shift; my $first_arg = shift; $$this += $first_arg; } sub shifty_3args { my $this = shift; my $first_arg = shift; my $second_arg = shift; my $third_arg = shift; $$this += $first_arg + $second_arg + $third_arg; } sub argumentative_1arg { my( $this, $first_arg ) = @_; $$this += $first_arg; } sub argumentative_3args { my( $this, $first_arg, $second_arg, $third_arg ) = @_; $$this += $first_arg + $second_arg + $third_arg; } sub direct_1arg { ${$_[0]} += $_[1]; } sub direct_3args { ${$_[0]} += $_[1] + $_[2] + $_[3]; } # main /------------------------------------------------ package main; my $total; bless( my $object = \$total, 'ArgTest' ); my @args = ( 1 .. 3 ); timethese( 100_000, { shifty_1arg => sub { $object->shifty_1arg( @args ) }, argumentative_1arg => sub { $object->argumentative_1arg( @args ) }, direct_1arg => sub { $object->direct_1arg( @args ) }, shifty_3args => sub { $object->shifty_3args( @args ) }, argumentative_3args => sub { $object->argumentative_3args( @args ) }, direct_3args => sub { $object->direct_3args( @args ) }, } ); print "total: $total\n"; exit;