> Ok, now I understand the plan. In brief, in the following example $result > is scoped to the block that encloses the whole loop: > > while (my $res = $search->getnext) { ...}
Yes. Because it's a lexical variable declared outside the closure controlled by the C<while>. > However, in the next example, $res is scoped to the loop: > > while $search->getnext() -> $res { ...} Yes. Because it's a parameter of the closure controlled by the C<while>. > Right? OK, that sounds cool. We still have loop-scoped variables. I'd > like to suggest, though, that the first example would refuse to compile. I don't think so. > If the plan is to significantly change the behavior of something as popular as > that construct (and I did some research, it's VERY popular, details > available on request), it would make more sense to refuse to compile than to > DWIDM (Do What I Don't Mean). Hmmmm. By the same argument we should refuse to compile the very popular C<$var[$idx]> and C<$var{key}> constructs, since they no longer mean what they meant in Perl 5. I don't think that's the right answer. A construct like: while (my $res = $search->getnext) { ...} has a valid meaning in Perl 6. In fact, it's meaning in Perl 6 is far more reasonable than in Perl 5. However, Miko has highlighted a genuine transition problem, and one might imagine something like: use warnings 'P52P6'; that would point out potential problems like this. Damian