One thing that I would like to add is the fact that it's generally a bad idea to allow functions or subs to absorb variables of greater scope by osmosis. If you want test2() to have access to a variable created in test1(), pass it to test2() by reference. If you want test2() to just receive the value, pass by value (instead of reference). But if you can at all avoid it, don't pass implicitly by assuming globals will be there to leak into functions.

There are exceptions, and one exception I can think of is static variables... this for example:

{ my $static = 10; sub test1 { print $static++, "\n"; } } test1(); test1(); __OUTPUT__ 10 11

This is a special situation where you actually want to access variables from outside of the sub's internal scope.


Dave


In reply to Re: Local Scope Variables by davido
in thread Local Scope Variables by Anonymous Monk

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.