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)',
})