Matthijs van Duin <[EMAIL PROTECTED]> writes: > On Sat, Mar 22, 2003 at 10:24:09PM +0200, arcadi shehter wrote: >> sub a { >> state $x; >> my $y; >> my sub b { state $z ; return $x++ + $y++ + $z++ ; } >> return &b; # is a \ before &b needed? >> } >> >> >>will all &b refer to the same $z ? > > yes, they will
Are you sure about that. If state is declaring a lexically scoped alias to a property of the block/sub, then each invocation of a will generate a different block/sub &b, which implies that the various &b instances won't share the same $z property. >> does it mean that this is legitimate sub a { >> state $x; >> my $y; >> state sub b { state $z ; return $x++ + $y++ + $z++ ; } >> return &b; # is a \ before &b needed? >> } > > No, since you can't refer to $y in that sub (perl 5 actually allows > you to do that but gives a warning 'Variable "%s" will not stay > shared' - but I hope perl 6 will simply give a compile-time error) Personally I would hope that it would correctly close over $y. Especially if, as you claim, $z would be shared by all values of &b. Otherwise there's no way to get that particular behaviour. -- Piers