Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

The way that you have used the term "lexical scope" when talking about local doesn't match the common definition of the term. For example see lexical scope and dynamic scope in FOLDOC.

Lexical scope is a compile-time construct relating to a region of the source code. With the commonly accepted definitions things like this:

With that said, what local does do is change the value of an existing package global for the length of a given lexical scope. Once that scope is exits, the package global returns to its former value e.g

and

If you've managed to succesfully understand and take in the tutorial up to this point you can see that local changes the value of $foo for the length of the lexical scope, and that it reverts to its original value once the scope exits.

use "lexical scope" incorrectly. local affects dynamic scoping - and is completely orthogonal to lexical scope. Almost the essence of local is that it can affect a variable outside of it's lexical scope :-)

In your example:

sub foo { # begin lexical scope local $x = "in the lexical scope of foo()"; print "\$x in foo() is: ", (defined $x ? $x : "undefined"), $/; bar(); } # end lexical scope sub bar { print "\$x in bar() is: ", (defined $x ? $x : "undefined"), $/; }

bar() is outside foo()'s lexical scope - demonstrating that local affects code outside the lexical scope it exists in.

Apart from that, nice intro :-)


In reply to Re: Lexical scoping like a fox by adrianh
in thread Lexical scoping like a fox by broquaint

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



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (5)
As of 2024-03-28 17:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found