http://www.perlmonks.org?node_id=559039


in reply to my vs. local subtlety

As stated in the original post, it was not my intention to suggest that this code was the only or best way to accomplish what I was trying to do. I could obviously have passed an array of array references or any number of other things rather than an array of letters. I posted it only because I thought it might be helpful to others to note the subtle "gotcha" between defining variables with "my" and with "local" when using a construct such as $$ctm.

As you noted, using $a and $b was an unfortunate choice in the snippet example but those names were chosen for brevity in the example, not as a model of good code.

Replies are listed 'Best First'.
Re^2: my vs. local subtlety
by davidrw (Prior) on Jul 03, 2006 at 19:39 UTC
    I posted it only because I thought it might be helpful to others to note the subtle "gotcha" between defining variables with "my" and with "local" when using a construct such as $$ctm.
    right, but my point was that if they don't use that construct, and instead use a safer, more robust, versatile, and maintainable construct, then the "gotcha" doesn't even exist ... IMHO I just saw it as recommending that one wear gloves when punching a wasp nest out of a tree -- the first thing anyone is gonna ask is "why aren't you using a ten-foot pole?".
    As quoted from the article (it's a good read if you haven't yet) i mentioned above, (Summary #2) Being careful does not mean trying to understand the possible consequences while behaving dangerously; it means avoiding dangerous behavior in the first place. Don't say ``I know it's dangerous, so I'll be really careful.'' Say ``I know it's dangerous, so I won't do it.''
Re^2: my vs. local subtlety
by ysth (Canon) on Jul 03, 2006 at 22:24 UTC
    I thought it might be helpful to others to note the subtle "gotcha" between defining variables with "my" and with "local" when using a construct such as $$ctm.

    Or a construct such as $#$arrnm or $$arrnm[$$ctm]. That is to say, your @out_a, etc. arrays also cannot be lexical (my) variables.

    The distinction isn't between my and local, it's between lexical and package variables. Symbolic refs (which look up a variable by an expression giving it's name) always find package variables, not lexical ones.