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

Well, there are enough cases where package variables are the only thing that works (mostly cases where perl insists on making package vars special). But your complaint isn't about that, exactly. Me, I just use our as a neater replacement for vars (IOW, I practically always just use our at the top of the script - and I prefer it over vars for that just because it looks better).

  • Comment on Re^3: My globals are visable; but undef'ed

Replies are listed 'Best First'.
Re^4: My globals are visable; but undef'ed
by tilly (Archbishop) on Jul 31, 2008 at 21:30 UTC
    I grant that it looks prettier, but if you're going to be sharing variables between scripts, it is distinctly worse.

    Within a script it doesn't matter which you use, but it is probably better to use my instead.

      I don't want this to turn into a long discussion, and I agree that using globals/package vars for sharing data is usually not a good idea (though it does work very well for most situations where you'd otherwise use "singletons" - especially when you can Export the variables). But I don't see what lexicals have to do with the post you referenced above.

        If you are using our to access data within one package only, why are you making it a global when you could trivially make it a lexical?

        Here are the rules I follow. I use my unless there is a specific reason not to. I will use our for certain standard globals that need to be global, such as @EXPORT_OK. When I need to share variables across multiple files I try to use Exporter to export it from one place to all of the places that need it. If that solution won't work, then I will "use vars" for the declaration. I never use our for any variables that I've invented within my code.

        I used to not use our for those standard globals. Instead I used to just initialize them before my use strict line. But it has been so long since anyone I care about has been using Perl 5.005 that I no longer worry about that.