To follow up on Elian's comment about the misleading description of "destruction". This is an area that has always confused (and contused) me. I think you could try adding this snippet to your nested lexical scope example and then things will become clearer:
my $foo = "file scope";
{
my $foo = "outer scope";
{
my $foo = "inner scope";
print " \$foo is: $foo\n";
sub innerfoo() {
$foo = "(Innerfoo) \$foo is: $foo\n";
print $foo;
}
}
print " \$foo is: $foo\n";
innerfoo();
}
print "\$foo is: $foo\n";
innerfoo();
innerfoo();
print "\$foo is: $foo\n";
__output__
$foo is: inner scope
$foo is: outer scope
(Innerfoo) $foo is: inner scope
$foo is: file scope
(Innerfoo) $foo is: (Innerfoo) $foo is: inner scope
(Innerfoo) $foo is: (Innerfoo) $foo is: (Innerfoo) $foo is: inner scop
+e
$foo is: file scope
What this snippet shows is that the inner $foo remains defined to the subroutine in the inner scope even though the program has passed on through it and down to the other scopes. You could mention that this is a bit like a C static if you want ...
Note: numerous puns about finding one's inner $elf are undoubtedly available if required
Dingus Enter any 47-digit prime number to continue.
-
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.
|