I found an old IRC discussion 
<http://irclog.perlgeek.de/perl6/2012-02-02#i_5091684> where TimToday 
specifically confirms that the `loop` construct doesn't get an exception to the 
consistent scoping rules of `my` variables:

    mikemol   for(int foo; foo < n; ++foo) { /* some code */ } ; /* use
              foo for something else; declaration from inside for() was
              still active... */

    TimToady  mikemol: are you suggesting that's a bug?  Perl 6 defines
              loop that way to get consistent semantics; we only use ->
              $foo to move external declarations into a blcok

    mikemol   TimToady: Yeah. Having declarations in the first part of a
              for(;;) group imply that those declarations are tied to
              that for(;;) statement. If a var needs to be survive the
              for(;;) statement, it ought to declared prior to the
              for(;;) statement. At least in languages which have strong
              relationships with C and C++ syntax. And, at least, IMO.
              It comes from seing things next to each other and expecting
              them to be closely related. It makes inductive leaps about
              behavior shorter.

    TimToady  well, Perl 5 went that route, and it turns into a complete
              mess of built-ins doing one thing (sometimes) and
              non-builtins doing something else

              can't have that in an extensible language where built-ins
              and non-built-ins are supposed to work the same

    mikemol   Sure.
              Perhaps the for(;;) construct is simply misnamed in Perl 6.

    TimToady  it's called loop (;;)
              and we very rarely use it
              and when we do use it, it's often because we *want* the
              loop variable to survive

    drake01   TimToady: How does perl6 deal with the complete mess you
              say?

    TimToady  my only ever declare a variable in the surrounding block


I'm closing this ticket accordingly.

Reply via email to