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


in reply to Re: The default hash - accident, coincidence or conspiracy?
in thread The default hash - accident, coincidence or conspiracy?

It is free for the using, if not taking. The local keyword is there to facilitate multiple code chunks using the same global variable independently. It works well enough for $_ and @_, it will work just as well for %_. (That's not to say it's a panacea, though.)

I don't understand why people think it's asking for trouble. It is no more asking for trouble than using $_ — and I sure wouldn't counsel anyone to avoid using $_. Quite the opposite, in fact.

That being said, there isn't any really good reason to use %_. The situations in which it would be the most obvious, "natural" name for a variable must be rare indeed.

Replies are listed 'Best First'.
Re^3: The default hash - accident, coincidence or conspiracy?
by tlm (Prior) on Jul 02, 2005 at 18:32 UTC

    I don't understand why people think it's asking for trouble.

    IMO, using package variables in one's code, in general, is asking for trouble (though there may be situations in which one is willing to accept this trouble). Moreover, as I pointed out, some module authors have had the bright idea of using variables such as %_, so one can't be sure that these variables are completely available, and that the other code that uses it is being good about using local whenever it uses the same variables. IMO, having to even worry about these things falls into the category of "trouble." The fact that the docs specifically state that the variables the OP asked about are reserved for Perl's use makes it all the more troublesome to use them.

    the lowliest monk

      Sure, and some module authors have had the bright idea of using $_. If you use a module that uses $_ (or any other global) and they haven't properly localized, then maybe you should rethink using that module. For better or worse, that's the way it is in the perl world. It's true for $_, and it's just as true for %_.

      You know, just because a module is out there doesn't mean people should use it. Would you use a module that didn't use strict and made all its variables global in %main:: ? I sure wouldn't.

        The $_ example is misleading, because Perl provides a lot of extra built-in help (like implicit localization) that it doesn't provide for other such variables. (I can easily imagine perfectly well-behaved modules that make heavy use of $_ without ever using a single explicit localization of $_.) Without this extra help I think the use of $_, at least in modules, would become much less attractive. An even with all the extra help, the use of $_ is still fraught with trouble.

        the lowliest monk