Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: What is %_

by Russ (Deacon)
on May 16, 2000 at 06:50 UTC ( #11812=note: print w/ replies, xml ) Need Help??


in reply to What is %_

Thanks for the posts so far.

I've searched the perl-porters mailing list archive. Other than obfuscated .sigs, etc., I've only found one thought-provoking mention (in a comment in a patch) of %_. The author says (something like) "Someday, we may have to change the %_ hack."

Anyone know if %_ has a specific purpose, or is it an artifact of the typeglob creation, per takshaka?

Follow-up question...
Since _ variables ($_, @_) hold arguments, would %_ make intuitive sense to you as "the variable holding named arguments"? It really was a random thought, but since I thoroughly enjoy learning idiomatic Perl, this idea struck me with some force.

Other than declaring it local (which suggests some deeper meaning in and of itself), how would you feel about code (a subroutine) which stores its named arguments in %_? Does this help or hinder self-documentation?

Russ

P.S. Why can't I "maintain" my original post? I would prefer to simply edit it, rather than make a new post for updates...


Comment on Re: What is %_
RE: Re: What is %_
by turnstep (Parson) on May 16, 2000 at 18:31 UTC

    "%_<filename" has a purpose in the debugger (see %DB::dbline), and that may be what the author of the patch meant by "the %_ hack".

    I also noticed that the module "English" assigns the whole typeglob (*_) to the name "ARG", i.e. @ARG becomes equivalent to @_, $ARG equivalent to $_, and therefore %ARG becomes equivalent to our mysterious %_. This further bolsters the theory that it's just a leftover from the others in the same typeglob.

    > Since _ variables ($_, @_) hold arguments, would %_ make
    > intuitive sense to you as "the variable holding
    > named arguments"? It really was a random thought, but
    > since I thoroughly enjoy learning idiomatic Perl, this
    > idea struck me with some force.

    Doesn't seem intuitive to me, sorry. I prefer named variables.

    > Other than declaring it local (which suggests some deeper
    > meaning in and of itself), how would you feel about
    > code (a subroutine) which stores its named arguments
    > in %_? Does this help or hinder self-documentation?

    Definitely hinders. In general, you want to stay away from using global special variables in the way that they were not intended, even if they appear as if they are not being "used" at the moment. Future versions of perl may do something with the %_ hash - who knows? The whole reason you cannot declare it with 'my' is because it is a special global variable. You can localize these, but not "my" them. Better to just create something like %subargs, or even %_subargs if you really like the underscore. :)

    Finally, as to your lack of editing problem, try complaining at the Editor Requests section. It may be a bug in the code, as sometimes (albeit very rarely) I cannot edit my own nodes either.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (4)
As of 2014-09-19 00:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (129 votes), past polls