Rate obj_named_param named_pram obj_pos_param obj_internal param obj_named_param 392157/s -- -14% -45% -48% -56% named_pram 454545/s 16% -- -37% -40% -49% obj_pos_param 716332/s 83% 58% -- -5% -19% obj_internal 754148/s 92% 66% 5% -- -15% param 889680/s 127% 96% 24% 18% -- localhost work # perl time.pl Rate obj_named_param named_pram obj_pos_param obj_internal param obj_named_param 387297/s -- -12% -45% -48% -55% named_pram 440141/s 14% -- -37% -41% -49% obj_pos_param 701262/s 81% 59% -- -6% -19% obj_internal 742942/s 92% 69% 6% -- -14% param 860585/s 122% 96% 23% 16% -- #### param - sub by position named_param - sub by name obj_internal - the values we use are stored inside the object. obj_pos_param - obj passing values by position obj_named_param - obj passed by name #### #!/usr/bin/perl package Blah; sub new { my $class = shift; my $self = { arg1 => 1, arg2 => 1 }; bless $self,$class ; return $self; } sub obj_internal { my $self = shift; return $$obj{arg1} + $$obj{arg2} } sub obj_pos_param { my ($self, $p1,$p2) = @_; return $p1 + $p2 } sub obj_named_param { my ($self, %p) = @_; return $p{arg1} + $p{arg2} } package main; use Benchmark qw(:all); our $obj = Blah->new; sub param { my ($p1,$p2) = @_; return $p1 + $p2 } sub named_param { my %p = @_; return $p{arg1} + $p{arg2} } cmpthese (5000000, { param => 'param(1,1)', named_pram => 'named_param(arg1 => 1,arg2 => 1)', obj_internal => '$obj->obj_internal()', obj_pos_param => '$obj->obj_pos_param(1,1)', obj_named_param => '$obj->obj_named_param(arg1 => 1,arg2 => 1)', })