Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^2: Need help with a conceptual speed bump

by mstone (Deacon)
on May 03, 2005 at 23:22 UTC ( [id://453773]=note: print w/replies, xml ) Need Help??


in reply to Re: Need help with a conceptual speed bump
in thread Need help with a conceptual speed bump

Hmm.. that's true, but this:

$n =1; $ref = "n"; $$ref = 2;

Gives us a dump that looks like so:

g <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 sym.pl:1) v ->3 5 <2> sassign vKS/2 ->6 3 <$> const[IV 1] s ->4 - <1> ex-rv2sv sKRM*/1 ->5 4 <#> gvsv[*n] s ->5 6 <;> nextstate(main 1 sym.pl:2) v ->7 9 <2> sassign vKS/2 ->a 7 <$> const[PV "n"] s ->8 - <1> ex-rv2sv sKRM*/1 ->9 8 <#> gvsv[*ref] s ->9 a <;> nextstate(main 1 sym.pl:3) v ->b f <2> sassign vKS/2 ->g b <$> const[IV 2] s ->c e <1> rv2sv sKRM*/1 ->f d <1> rv2sv sKM/DREFSV,1 ->e c <#> gv[*ref] s ->d

The difference doesn't appear to be large there, either. This time the switch is between ex-rv2sv / rv2sv and gvsv / gv. I don't have a copy of the perl source at hand, but I'd imagine the behavior is much the same as in method and method_named. The problems are similar, after all.

The point is, that little bit of indirection occurs in a place where things can go blooey with frightening ease. Imagine code that took the method name as a function parameter instead of looking it up in a statically-defined list. Yucko. Granted, Perl won't auto-vivify functions or clobber a function definition because of a typo, so this is less dangerous than using symrefs for lvalues, but the general mechanism can still be used to do some horribly ugly things.

Still, you've tipped the scale a bit further in the "less dangerous than flossing with a loaded shotgun" direction, so thanks for your time.

Replies are listed 'Best First'.
Re^3: Need help with a conceptual speed bump
by chromatic (Archbishop) on May 04, 2005 at 01:02 UTC

    Good point about global variables. I do think that the difference being that functions aren't writeable (at least as you're using them here) is the important point though.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (2)
As of 2024-04-19 19:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found