Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
Keep It Simple, Stupid
 
PerlMonks  

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

by Rhandom (Curate)
on Apr 27, 2001 at 03:05 UTC ( #75959=note: print w/ replies, xml ) Need Help??


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

Don't worry, I had that happen on mine as well, but in every case, the my was a percentage faster and the ref was a percentage slower and everything else just hummed around in the middle. The point wasn't the benchmark. The point was that declaring aliases or setting up your own constant subs, are not that much slower than my'ing a variable or local'ing a variable.

The point of benchmark is ballpark, and all of the types are in the ball park.

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


Comment on Re: Re: Re: my $var; vs. use constant VAR = '';
Re(4): my $var; vs. use constant VAR = '';
by MeowChow (Vicar) on Apr 27, 2001 at 03:23 UTC
    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
      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)];
Re^4: my $var; vs. use constant VAR = '';
by donaldhasson (Initiate) on Aug 03, 2008 at 16:54 UTC

    So here are my benchmark results on Win XP with version 5.10. Mine are drastically different showing the 'use constant' is fastest. Do the newer versions of Perl treat constants differently?
    mod[3]sub[3] my[3]local[3] ref[3]alias[3] Rate CAlias CRef CLocal CMy CSub CMod CAlias 3014249/s -- -9% -20% -22% -27% -45% CRef 3305288/s 10% -- -12% -14% -20% -40% CLocal 3749148/s 24% 13% -- -3% -10% -32% CMy 3849294/s 28% 16% 3% -- -7% -30% CSub 4149204/s 38% 26% 11% 8% -- -25% CMod 5504587/s 83% 67% 47% 43% 33% --

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2014-04-23 23:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (557 votes), past polls