> Larry has said very clearly that in Perl 6 there are no "magical" lexical scopes.
> That is, variables declared in a C<loop> control aren't magically in the
> following block.
However, I don't agree with him. It may be more intuitive to newcomers,
but it is a common programming idiom that is used a lot. The C++
programmer expects it to be scoped the traditional way; the Java
programmer does too; not to mention all those old Perl 5 programmers.
If someone doesn't know Perl that well, but they know other languages,
seeing:
loop (my $x = 0; $x < 100; $x++) {
something();
}
$x--;
Would be confusing. I know _I_ would look for the latter $x's scope, and
assume it was bad program design. But then I realize that there's no $x in
the enclosing scope, and I realize that it works. But if I have to stop
and think about it, it makes it harder to read, if you know what I mean.
And what about closures?
{
my @subs;
loop (my $x = 0; $x < 10; $x++) {
push @subs, { $^a + $x };
}
$x--;
# ...
}
This certainly does *not* DWIM in the current thought. And the silence
would be much more confusing than a simple syntax error the traditional
way with the same code; that is assuming use strict is enabled.
Oh, and while we're on the topic of loops, I think NEXT needs a renaming.
Because this block is executed even on the last iteration, right? So I
think it would be more intuitive to name it POST, or AFTEREACHITERATION
:).
Luke