http://qs1969.pair.com?node_id=274463


in reply to Re: $_ scoping issues
in thread $_ scoping issues

All very correct. To specifically state it: $_ is a global variable, and is shared between all packages.

This means that if you use it, you should use local() to be polite to your callers, and you should be careful to insulate yourself from code that may alter it.

This can be a difficult proposition if you didn't write the code yourself (and sometimes even if you did!). Generally, you have to look at each appllication of $_ and judge on a case-by-case basis whether someone else may be modifying it while you're using it.

Your best protection is to get into the habit of always localizing it yourself, so as not to step on someone else's toes, and to not trust that code you call has always been so polite.

Replies are listed 'Best First'.
Re: Re: Re: $_ scoping issues
by tilly (Archbishop) on Jul 16, 2003 at 01:42 UTC
    To more precisely state it, no matter what package has been declared, $_ means $main::_.

    As an amusing side effect, the declaration our $_; will (if you are in any package other than main) cause your explicit references to $_ to not be the $_ that you expect...

Re: Re: Re: $_ scoping issues
by swkronenfeld (Hermit) on Jul 15, 2003 at 17:27 UTC
    thanks guys, these are the kind of things that a former C programmer needs to learn about programming in perl =)

    these forums are terrific, I've learned a lot over the last day browsing through the nodes. What a helpful community!