Rate copied proto caller direct called NAMED
copied 105/s -- -52% -62% -62% -62% -62%
proto 219/s 109% -- -20% -21% -21% -21%
caller 274/s 162% 25% -- -1% -1% -2%
direct 277/s 164% 26% 1% -- -0% -1%
called 277/s 164% 26% 1% 0% -- -1%
NAMED 279/s 166% 27% 2% 1% 1% --
####
Rate copied called caller proto NAMED direct
copied 15741/s -- -54% -57% -66% -74% -74%
called 34560/s 120% -- -5% -25% -43% -44%
caller 36557/s 132% 6% -- -21% -39% -41%
proto 46058/s 193% 33% 26% -- -24% -25%
NAMED 60268/s 283% 74% 65% 31% -- -2%
direct 61563/s 291% 78% 68% 34% 2% --
####
use constant {
STRING=>0,
NUMS=>1,
};
sub foo{
$_[STRING] =~ tr[...][...] if $_[NUMS] == '123';
}
####
#! perl -slw
use strict;
use vars qw[ $VALIDATE ];
use Benchmark qw[ cmpthese ];
sub copied_args {
my( $a1, $a2 ) = @_;
$a1 =~ tr[A-Za-z][N-ZA-Mn-za-m];
$a2 =~ tr[0-9][9876543210];
return $a1, $a2;
}
sub proto_refs ($$) {
my( $a1, $a2 ) = @_;
$a1 =~ tr[A-Za-z][N-ZA-Mn-za-m];
$a2 =~ tr[0-9][9876543210];
return;
}
sub caller_refs {
my( $a1, $a2 ) = @_;
$$a1 =~ tr[A-Za-z][N-ZA-Mn-za-m];
$$a2 =~ tr[0-9][9876543210];
return;
}
sub called_refs {
my( $a1, $a2 ) = \( @_ );
$$a1 =~ tr[A-Za-z][N-ZA-Mn-za-m];
$$a2 =~ tr[0-9][9876543210];
return;
}
sub direct_args {
$_[0] =~ tr[A-Za-z][N-ZA-Mn-za-m];
$_[1] =~ tr[0-9][9876543210];
return;
}
use constant { STRING=>0, NUMS=>1 };
sub NAMED_args {
$_[STRING] =~ tr[A-Za-z][N-ZA-Mn-za-m];
$_[NUMS] =~ tr[0-9][9876543210];
return;
}
our $small_text = 'The Quick Brown Fox Jumps Over The Lazy Dog';
our $large_text = $small_text x 1000;
our $small_nums = '0123456789';
our $large_nums = $small_nums x 1000;
if( $VALIDATE ) {
( $small_text, $small_nums ) =
copied_args $small_text, $small_nums; print $small_text, ' : ', $small_nums;
( $small_text, $small_nums ) =
copied_args $small_text, $small_nums; print $small_text, ' : ', $small_nums;
caller_refs \$small_text, \$small_nums; print $small_text, ' : ', $small_nums;
caller_refs \$small_text, \$small_nums; print $small_text, ' : ', $small_nums;
called_refs $small_text, $small_nums; print $small_text, ' : ', $small_nums;
called_refs $small_text, $small_nums; print $small_text, ' : ', $small_nums;
proto_refs $small_text, $small_nums; print $small_text, ' : ', $small_nums;
proto_refs $small_text, $small_nums; print $small_text, ' : ', $small_nums;
direct_args $small_text, $small_nums; print $small_text, ' : ', $small_nums;
direct_args $small_text, $small_nums; print $small_text, ' : ', $small_nums;
NAMED_args $small_text, $small_nums; print $small_text, ' : ', $small_nums;
NAMED_args $small_text, $small_nums; print $small_text, ' : ', $small_nums;
}
else {
cmpthese( -3, {
'copied_small' => q[ ( $small_text, $small_nums ) =
copied_args $small_text, $small_nums; ],
'caller_small' => q[ caller_refs \$small_text, \$small_nums; ],
'called_small' => q[ called_refs $small_text, $small_nums; ],
' proto_small' => q[ proto_refs $small_text, $small_nums; ],
'direct_small' => q[ direct_args $small_text, $small_nums; ],
' NAMED_small' => q[ NAMED_args $small_text, $small_nums; ],
});
cmpthese( -3, {
'copied_large' => q[ ( $large_text, $large_nums ) =
copied_args $large_text, $large_nums; ],
'caller_large' => q[ caller_refs \$large_text, \$large_nums; ],
'called_large' => q[ called_refs $large_text, $large_nums; ],
' proto_large' => q[ proto_refs $large_text, $large_nums; ],
'direct_large' => q[ direct_args $large_text, $large_nums; ],
' NAMED_large' => q[ NAMED_args $large_text, $large_nums; ],
});
}