On Dec 30, 2007 5:49 PM, tom arnall <[EMAIL PROTECTED]> wrote:
> oops. i just ran the code. no diff' when run $TWO_THIRDS. oh well, in Perl
> subroutines are cheap!
Subroutines aren't that cheap, but making them unary operators lessens
the costs and using the constant pragma makes it even cheaper:
CONSTANT => 10
func => 10
literal => 10
unary => 10
var => 10
Rate func var unary CONSTANT literal
func 2595485/s -- -82% -95% -97% -97%
var 14534717/s 460% -- -74% -84% -85%
unary 55361213/s 2033% 281% -- -39% -44%
CONSTANT 91039156/s 3408% 526% 64% -- -8%
literal 98576846/s 3698% 578% 78% 8% --
#!/usr/local/ActivePerl-5.10/bin/perl
use strict;
use warnings;
use feature ':5.10';
use Benchmark;
use constant CONSTANT => 5;
sub unary () { 5 }
sub func { 5 }
my $var = 5;
my %subs = (
literal => sub { 5 + 5 },
CONSTANT => sub { CONSTANT + 5 },
unary => sub { unary + 5 },
func => sub { func() + 5 },
var => sub { $var + 5 },
);
say "$_ => ", $subs{$_}() for sort keys %subs;
Benchmark::cmpthese(-1, \%subs);
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/