AFIAK the only reason to use our() instead of use vars is that it's cleaner to restrict access global variable to some limited scope(s) where you intend to use them: use vars opens up the access till the end of file the package.

In other words - the scoping of our() is the only difference compared to use vars.

my is different in that lexicals aren't coupled to a package and therefore need extra work if you want access to them from another file.

update:

As for the performance of our() vs vars() vs my () - AFAIK lexicals are always faster than globals - provided you have direct access to them - since package globals require a hashtable lookup and lexicals are in an array of which the index is computed at compile time.

My conclusion:

You are probably right that most uses of package variables are gratuitous and could be replaced with lexicals without any trouble.

However, if you need access to variables from another file, or are interfacing with XS code, and you're sure that you really only need one instance of that specific variable, a package variable can be easier and more efficient than a lexical.


In reply to Re: Examples fo Where "our" is really needed by Joost
in thread Examples fo Where "our" is really needed by geekondemand

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.