Damian Conway writes:
: "Bryan C. Warnock" wrote:
: > 
: > No examples are given, but are we to assume that this:
: > 
: >     for ($x = 0; $x < 100; $x++) {
: >         ...
: >     }
: > 
: > becomes this:
: > 
: >     loop $x=0; $x < 100; $x++ {
: >         ...
: >     }
: 
: Yes.
: 
:  
: > How would you use an $x lexically scoped to the loop block?
: 
: You can't...directly. Nor can a C<while> or C<if>. The new rule is that
: to be lexical to a block it has to be declared in the block, or in the
: block's parameter list.
: 
: You'd need to use another layer of braces:
: 
:       do {
:       loop my $x=0; $x < 100; $x++ {
:           ...
:       }
:       }


In this case, you can get a lexical declarationjust say

    for 0...100 -> $x {
        ...
    }

since C<< -> $x >> is considered similar to C<sub ($x)>, which is
the only other way to declare a "my" variable outside its block.  (In
either case, the lexical defaults to read-only within the block.)

Note the ... there, borrowed from Ruby to mean "leave out the endpoint".

Larry

Reply via email to