in reply to Re^9: My globals are visable; but undef'ed
in thread My globals are visable; but undef'ed

Yes, it does make a difference. If I have use vars qw($var); in one library, and I use that library in my script, then $var is declared in my script as well. Which means that if I get to my script and think it should be $vars, that thinko is caught by strict.pm.

If I was using our instead then that mistake would never be caught because I would have declared it differently in the library and the script.

Replies are listed 'Best First'.
Re^11: My globals are visable; but undef'ed
by Joost (Canon) on Jul 31, 2008 at 22:59 UTC
      If you Export the variables, then you don't need to declare them at all in your script. :-)

      I grant that it is fairly rare that you need to have 2 different files with code in the same package. But it does happen from time to time. For example you might encounter that at a first pass in refactoring some spaghetti. For another example some modules may need to autogenerate code in another package's namespace. In those situations it is better to use vars than to declare with our.

        If you Export the variables, then you don't need to declare them at all in your script. :-)
        Exactly ;-)
        I grant that it is fairly rare that you need to have 2 different files with code in the same package. But it does happen from time to time. For example you might encounter that at a first pass in refactoring some spaghetti. For another example some modules may need to autogenerate code in another package's namespace. In those situations it is better to use vars than to declare with our.
        Fair enough. You may have even convinced me to use vars a bit more than I do now; I'll keep it in mind the next time these kinds of scenarios come along.

        For my part, though, I would suggest that using our keeps down code smell (like spreading packages over multiple files). The fact that it makes those kinds of constructs harder is IMHO a feature. YMMV depending on context, of course :-)