I thought that I would no longer be able to call $cfg once inside the 'unless'

You seem to have figured this out, but I'd just like to reinforce the point. Scalar variables are accessible from inner scopes, but not from outer scopes. So if you scope a variable in the top-level of a subroutine, then any nested blocks (if statements, while loops, etc) will have access to the variable. But anything outside of the subroutine will not. Here's the obligatory code example:

sub foo { my $foo = 1; if (1 == 1) { # just to demonstrate the point $foo++; # inside foo, works fine } print $foo; bar(); } sub bar { print $foo; # outside foo, blows up } foo();

Also keep in mind that the inner/outer determination is done "physically". That is, it's not based on the call stack. It's based on the location in the actual code. This is different from dynamic scoping (i.e. local in Perl), which is based on the execution path. For this reason, lexical scoping is much more predictable and understandable. Here's an example:

sub foo { local $foo = 1; if (1 == 1) { # just to demonstrate the point $foo++; } print "From foo: $foo\n"; bar(); } sub bar { # this variable will be set to whatever it was # before we got called print "From bar: $foo\n"; } $foo = 5; foo(); bar();

In reply to Re^3: For the life of me, i can't figure out this "use strict" variable problem by revdiablo
in thread For the life of me, i can't figure out this "use strict" variable problem by dcasey

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.