Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: Efficiency of $$var, ${$var}

by MZSanford (Curate)
on Aug 20, 2001 at 13:35 UTC ( #106161=note: print w/replies, xml ) Need Help??

in reply to Efficiency of $$var, ${$var}

    They call me obsessed. They call me crazy. But fear not, the Over-Optimizer is here. I, like many programmers, will optimise the smallest code just to eek out the smallest gains. In doing this you learn the art of optimsation.Also, i am a programmer, not an english teacher, so please ignore any spelling errors. See below :

Checking : $$var vs. ${$var}

Test Code :
#!/usr/bin/perl $a = "foo"; $b = \$a; print "b : $$b\n"; print "b2 : ${$b}\n";

Tests : perl -MO=Deparse,-p
    if inconclusive ...
perl -Dt

Test 1 :
perl -MO=Deparse,-p ($a = 'foo'); ($b = (\$a)); print("b : $$b\n"); print("b2 : ${$b;}\n"); syntax OK

hmmmm, no real help there. Actually, based on the ";" added on the second print, ${$var} might be slower (which would make my guess wrong).

Test 2 :
perl -Dt ( enter ( nextstate ( const(PV("foo"\0)) ( gvsv(main::a) ( sassign ( nextstate ( gvsv(main::a) ( srefgen ( gvsv(main::b) ( sassign ( nextstate ( pushmark ( const(PV("b : "\0)) ( gvsv(main::b) ( rv2sv ( concat ( const(PV("\n"\0)) ( concat ( print b : foo ( nextstate ( pushmark ( const(PV("b2 : "\0)) ( gvsv(main::b) ( rv2sv ( concat ( const(PV("\n"\0)) ( concat ( print b2 : foo ( leave

Eurica !

Now, for those who did not spot it, here is what i am seeing :
    The first line which has ( is entering the print statement. Reading from there to the end, there are two duplicated sections, meaning the exact same path is used for both de-referencers. So, to show it more clearly (sorry about any code wrapping) :
( nextstate ( nextstate ( pushmark ( pushmark ( const(PV("b : "\0)) ( const(PV("b2 : " +\0)) ( gvsv(main::b) ( gvsv(main::b) ( rv2sv ( rv2sv ( concat ( concat ( const(PV("\n"\0)) ( const(PV("\n"\0) +) ( concat ( concat ( print ( print b : foo b2 : foo

So, $$var and ${$var} are the same after optimisation.
always more than one way to skin an amoebae
-- MZSanford

Replies are listed 'Best First'.
Re: Re: Efficiency of $$var, ${$var}
by RhetTbull (Curate) on Aug 20, 2001 at 20:18 UTC
    >I, like many programmers, will optimise the smallest code
    >just to eek out the smallest gains. In doing this you
    >learn the art of optimsation.

    I would have to disagree with you on that. The art of optimization is knowing when it's worth optimizing and when it isn't. In my experience, most code isn't worth optimizing. Over-optimizing to save a few microseconds (or less!) is rarely worth it. That said, there are certainly times when you do need to optimize and fixing up a particularly slow (and often used) bit of code (for example, a regex inside a loop) can certainly save the day but writing obscure code to shave off a few microseconds would not classify as "art" in my book.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://106161]
[erix]: that's really impossible with bigint
[erix]: and the site is still only 'hopefully' active :)
[erix]: but fair enough, he may think he solves a problem

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (8)
As of 2017-06-23 15:48 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (551 votes). Check out past polls.