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