On Tue, Mar 17, 2009 at 06:45:51PM +0100, Jonathan Worthington wrote:
> Nicholas Clark wrote:
> >Yay. As does this?
> >
> >   my @bar = 1,2,3;
> >   sub swatest {
> >       (state @foo) = @bar;
> >       my $x = @foo.perl;
> >       @foo[0]++;
> >       return $x
> >   }
> >   is swatest(), '[1, 2, 3]', 'array state initialized correctly';
> >   is swatest(), '[1, 2, 3]', 'array state retained between calls';
> >
> >
> >[which IIRC is specified as being different]
> >
> >  
> You had me thinking, "huh", for a moment before I realized why it's 
> different. And yes, Rakudo gets the answers you expect. Added to the 
> tests, thanks again!

I don't understand why it's different, but Larry says that it is.

(The current way Perl 5 builds its optree, you can't tell my (@foo) = @bar;
and (my @foo) = @bar; apart, so it isn't currently different in Perl 5,
hence why state (@foo) = @bar; is currently a syntax error. But this does
now mean that a Perl 6 implementation can do state variables better than Perl
5, which can only do initalisers on a scalar.)

Nicholas Clark

Reply via email to