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

Re: aliasing arrays using typeglob under strict

by AnomalousMonk (Archbishop)
on Feb 08, 2013 at 03:25 UTC ( [id://1017752]=note: print w/replies, xml ) Need Help??


in reply to aliasing arrays using typeglob under strict

... this seemingly useful idiom for casting array refs back to arrays.

... and for creating global symbols (with the creation points buried in functions) to lie in wait to ambush your sanity during your next 3 AM debug session.

If you're not dealing with module operations (e.g., export of package variables), what would be wrong (or less useful) with using the standard lexical  @$array_ref  $#$array_ref  $array_ref->[$index]  @{ $array_ref }[ $n .. $m ] etc. dereferencing operators/operations?

Replies are listed 'Best First'.
Re^2: aliasing arrays using typeglob under strict
by BrowserUk (Patriarch) on Feb 08, 2013 at 03:40 UTC
    and for creating global symbols (with the creation points buried in functions) to lie in wait to ambush your sanity during your next 3 AM debug session.

    There is no risk if the globals are localised; and the syntax advantages are clear.

    Not using a feature because it involves the temporary use of localise (effectively lexical*) "global variables" is unfounded paranoia.

    (*Nothing associated with this usage persists beyond the lexical scope in which the aliasing is performed.)


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Nothing associated with [the temporary use of localise] persists beyond the lexical scope in which the aliasing is performed.

      I disagree. In my understanding, the dynamic scope of a function in respect of package (or global) variables extends to all functions called by the function, in contrast to lexical scope, which is, well, lexical.

      So in the example code below, the function  G() can exercise "spooky action at a distance" on data localized in the  F() function because  G() executes within the dynamic scope of  F().

      One may say that this effect may be avoided by remembering to carefully localize all package variables in all called functions, but this is just the sort of 'care' that one so often forgets to exercise in one's own behalf, to say nothing of all the other stumblebums out there.

      IOW, not using global variables is very well-founded paranoia: sometimes those globals really are out to get you! There's a place for globals, gotos, and a host of other 'questionable' programming constructs, but they should always be approached accompanied by a healthy dose of paranoia.

      >perl -wMstrict -le "my @ra = (9, 8, 7, 6); ;; F(\@ra); ;; sub F { our @ydata; local *ydata = shift; print qq{pre-G: (@ydata)}; G(); print qq{post-G: (@ydata)}; } ;; sub G { our @ydata = 'Gaaaahh!'; } " pre-G: (9 8 7 6) post-G: (Gaaaahh!)
        One may say that this effect may be avoided by remembering to carefully localize all package variables in all called functions,

        Unintended side effects are unintended side effects:

        sub G { our @ydata = 'Gaaaahh!'; };; sub F{ my @a = @_; print qq{pre-G: (@ydata)}; G(); print qq{post-G: (@ydata)}; };; F(1..4);; pre-G: () post-G: (Gaaaahh!)

        The problem has nothing to do with aliasing and everything to do with not localising!

        Your previous quote is better stated as: "don't use code that uses globals for no good reason.".

        Which is doubly true for code that fails to localise its use of globals.

        a healthy dose of paranoia.

        Sorry, but I will always consider 'paranoia' in programming -- and pretty much everything else for that matter -- with exclusively negative connotations.

        The teaching of 'paranoia', rather than 'knowledge', in an attempt to avert disaster, is always a counter productive and ultimately futile process.

        With paranoia, one can only hope to avert bad consequences; with knowledge one can know you have.

        Don't hope, know!


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (5)
As of 2024-03-19 08:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found