Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re(4): my $var; vs. use constant VAR = '';

by MeowChow (Vicar)
on Apr 27, 2001 at 03:23 UTC ( #75965=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: Re: my $var; vs. use constant VAR = '';
in thread my $var = ''; vs. use constant VAR => '';

Interestingly, if you throw a literal value in the mix, as done below, you will find that the literal is even usually a hair slower than a my variable. I'd be very curious to know why that is:

#!/usr/bin/perl -w use strict; use vars qw(*const_alias $const_local); use Benchmark qw(cmpthese); local *const_alias = \100; my $const_ref = \100; local $const_local = 100; my $const_my = 100; sub CONST_SUB () { 100 }; use constant CONST_MOD => 100; print "mod[".CONST_MOD."]\nsub[".CONST_SUB."]\n" ."my[$const_my]\nlocal[$const_local]\n" ."ref[$$const_ref]\nalias[$const_alias]\n"; # run iteratively within the sub to get a less skewed # result - that's my theory anyway :-) my $iter = 500; my $t; cmpthese (-5, { CMod => sub { $t = CONST_MOD for 1..$iter }, CSub => sub { $t = CONST_SUB for 1..$iter }, CMy => sub { $t = $const_my for 1..$iter }, CLocal => sub { $t = $const_local for 1..$iter }, CRef => sub { $t = $$const_ref for 1..$iter }, CAlias => sub { $t = $const_alias for 1..$iter }, CLit => sub { $t = 100 for 1..$iter }, }); ### RESULTS (repeatable this time :) ### Rate CRef CAlias CLocal CSub CLit CMod CMy CRef 3735/s -- -9% -9% -10% -11% -11% -13% CAlias 4088/s 9% -- -0% -2% -3% -3% -5% CLocal 4088/s 9% 0% -- -2% -3% -3% -5% CSub 4172/s 12% 2% 2% -- -1% -1% -3% CLit 4208/s 13% 3% 3% 1% -- -0% -2% CMod 4210/s 13% 3% 3% 1% 0% -- -2% CMy 4293/s 15% 5% 5% 3% 2% 2% --
   MeowChow                                   
               s aamecha.s a..a\u$&owag.print


Comment on Re(4): my $var; vs. use constant VAR = '';
Select or Download Code
Re: Re(4): my $var; vs. use constant VAR = '';
by Rhandom (Curate) on Apr 27, 2001 at 03:33 UTC
    Ahhhh -- but run that again. New values. Perils of Benchmark {grin}. On our system here (6 to 7 developers per box) the load changes enough that even a "stable" test will show different outputs.

    Something that would be nice for benchmark to do is to randomize the order in which the tests are run -- pick one of the keys randomly each time. This would probably make the percentages a little bit more constant.

    Still though, kind of funny that things are in the ball park of a literal value.

    my @a=qw(random brilliant braindead); print $a[rand(@a)];

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://75965]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (9)
As of 2014-08-29 20:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (289 votes), past polls