> In Perl 6 a lexical variable is scoped to the block in which it's
declared.
> Since C<$cond> is declared in the block *containing* the C<while> and
C<else>,
> it's scoped to that block. So you can use it inside the C<while>'s block,
> inside the C<else>'s block (assuming Larry allows such a construct), and
in
> the following C<print> statement.
OK, will at least this statement still work as it does in Perl5? Notice
addition of parens.
use strict;
...
while (my $result = blah() ) {
...
}
print $result, "\n";
i.e., $result is scoped to each iteration of the while loop, and the
compiler crashes on the last line because $result isn't my'ed.
If that changes, I for one will need to go rewrite virtually every script
and library I maintain, not to mention changing my coding style to something
more Java-like in its inconenience. My personal pain aside, it seems
counter-intuitive to me. $result gets my'ed over and over and over. In my
world view that should result in a warning about declaring the same variable
twice in the same scope.
Even if the addition of the parens does make a difference, it doesn't look
quite logical to me. Parens in an evaluation are just grouping mechanisms,
not structural controls. $me && $you is the same as ($me && you). So the
addition of parens in the example above looks like just a redundant
indication of grouping, not a declaration of a change in scoping rules.
-Miko