### 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 test_ref.pl
if inconclusive ...
perl -Dt  test_ref.pl

Test 1 :
```perl -MO=Deparse,-p test_ref.pl

(\$a = 'foo');
(\$b = (\\$a));
print("b : \$\$b\n");
print("b2 : \${\$b;}\n");
test_ref.pl 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  test_ref.pl

(test_ref.pl:0) enter
(test_ref.pl:0) nextstate
(test_ref.pl:3) const(PV("foo"\0))
(test_ref.pl:3) gvsv(main::a)
(test_ref.pl:3) sassign
(test_ref.pl:3) nextstate
(test_ref.pl:4) gvsv(main::a)
(test_ref.pl:4) srefgen
(test_ref.pl:4) gvsv(main::b)
(test_ref.pl:4) sassign
(test_ref.pl:4) nextstate
(test_ref.pl:7) pushmark
(test_ref.pl:7) const(PV("b : "\0))
(test_ref.pl:7) gvsv(main::b)
(test_ref.pl:7) rv2sv
(test_ref.pl:7) concat
(test_ref.pl:7) const(PV("\n"\0))
(test_ref.pl:7) concat
(test_ref.pl:7) print
b : foo
(test_ref.pl:7) nextstate
(test_ref.pl:9) pushmark
(test_ref.pl:9) const(PV("b2 : "\0))
(test_ref.pl:9) gvsv(main::b)
(test_ref.pl:9) rv2sv
(test_ref.pl:9) concat
(test_ref.pl:9) const(PV("\n"\0))
(test_ref.pl:9) concat
(test_ref.pl:9) print
b2 : foo
(test_ref.pl:9) leave

Eurica !

Now, for those who did not spot it, here is what i am seeing :
The first line which has (test_ref.pl:7) 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) :
```(test_ref.pl:4) nextstate             (test_ref.pl:7) nextstate
(test_ref.pl:7) pushmark              (test_ref.pl:9) pushmark
(test_ref.pl:7) const(PV("b : "\0))   (test_ref.pl:9) const(PV("b2 : "
+\0))
(test_ref.pl:7) gvsv(main::b)         (test_ref.pl:9) gvsv(main::b)
(test_ref.pl:7) rv2sv                 (test_ref.pl:9) rv2sv
(test_ref.pl:7) concat                (test_ref.pl:9) concat
(test_ref.pl:7) const(PV("\n"\0))     (test_ref.pl:9) const(PV("\n"\0)
+)
(test_ref.pl:7) concat                (test_ref.pl:9) concat
(test_ref.pl:7) print                 (test_ref.pl:9) 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.

Create A New User
Node Status?
node history
Node Type: note [id://106161]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2018-05-20 21:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
World peace can best be achieved by:

Results (150 votes). Check out past polls.

Notices?