On Sat, Jul 12, 2008 at 11:05:35AM -0500, Patrick R. Michaud wrote:
> On Sat, Jul 12, 2008 at 08:50:44AM -0700, chromatic wrote:
> > On Saturday 12 July 2008 08:06:33 Patrick R. Michaud wrote:
> > > Short answer:  cloning is what will enable the following to work:
> > >
> > >     for 1..10 -> $x {
> > >         sub foo() { say $x; }
> > >         push(@foos, &foo);
> > >     }
> > 
> > Is that really valid Perl 6 code?  I can see "my sub foo" 
> > working there, but rebinding lexicals for global symbols goes 
> > against a decade of Perl 5 for me.
> 
> I don't know if it's valid or not.

However, I think it'd be basically equivalent to the 
following non-loop (but recursive) version:

    sub bar($x) {
        sub foo() { say $x; }
        push(@foos, &foo);
        if $x < 10 { bar($x + 1); }
    }
    bar(1);

Perhaps it doesn't make any sense, but I'd be hard-pressed
to immediately say that this second version isn't valid.

And I might be able to make the argument that it's nearly
equivalent to

    for 1..10 -> $x {
        our &foo = -> { say $x; }
        push(@foos, &foo);
    }

with the exception that &foo is uninitialized prior to the loop
in this last version.

Comments and counter-arguments welcome.

Pm

Reply via email to