sub describe {
my $ref = shift();
my %person = %{$ref};
print "$person{name} is a $person{job}"
}
...
describe( { person=>'buffy', job=>'vampire slayer' } );
####
sub describe {
my %person = @_;
print "$person{name} is a $person{job}"
}
...
describe( person=>'buffy', job=>'vampire slayer' );
####
sub describe {
my $personref = shift;
print "$person->{name} is a $person->{job}";
}
...
describe( { person=>'buffy', job=>'vampire slayer' } );
####
p:\test>Bench
Rate describe1 describe2 describe3 describe4
describe1 5186/s -- -28% -76% -78%
describe2 7232/s 39% -- -66% -70%
describe3 21387/s 312% 196% -- -11%
describe4 24048/s 364% 233% 12% --
####
p:\test>Bench -P -N=-1 >log
Rate describe1 describe2 describe3 describe4
describe1 4458/s -- -25% -71% -73%
describe2 5907/s 32% -- -62% -65%
describe3 15361/s 245% 160% -- -8%
describe4 16639/s 273% 182% 8% --
####
#! perl -slw
use strict;
use Benchmark qw[ cmpthese ];
use vars qw[ $P $N ];
sub describe1 {
my $ref = shift;
my %person = %{ $ref };
my @__passed_to_print = "$person{person} is a $person{job}";
print @__passed_to_print if $P;
}
sub describe2 {
my $ref = shift;
my @__passed_to_print = "$ref->{person} is a $ref->{job}";
print @__passed_to_print if $P;
}
sub describe3 {
my( $person, $job ) = @_;
my @__passed_to_print = "$person is a $job";
print @__passed_to_print if $P;
}
use constant { PERSON=>0, JOB=>1 };
sub describe4 {
my @__passed_to_print = "$_[PERSON] is a $_[JOB]";
print @__passed_to_print if $P;
}
cmpthese( $N || -1, {
describe1 => q[ describe1( { person=>'Buffy', job=>'Vampire Slayer' } ); ],
describe2 => q[ describe2( { person=>'Buffy', job=>'Vampire Slayer' } ); ],
describe3 => q[ describe3( 'Buffy', 'Vampire Slayer' ); ],
describe4 => q[ describe4( 'Buffy', 'Vampire Slayer' ); ],
});