On Mon, Aug 14, 2006 at 04:01:47PM +0000, Luke Palmer wrote: > What do these do? > > for 1,2 { > my $code = { > my $x; > BEGIN { $x = 42 } > $x; > }; > say $code(); > }
Assuming that variables are available immediately as they are parsed and that BEGIN blocks disappear as soon as they execute, I'd expect that the first $code would be equivalent to my $code = { my $x = 42; $x; }; and the second code would be equivalent to my $code = { my $x ; $x; }; So, I guess the output would be 42 # this line intentionally left blank :-) > for 1,2 { > my $code = { > state $x; > BEGIN { $x = 42 } # mind you, not FIRST > $x++; > }; > say $code(); > say $code(); > } Same thing here, except because it's a state variable, it keeps it's value between invocations, so the output would be: 42 43 # again, blank on purpose 1 > for 1,2 -> $x { > END { say $x } > } For this one I'd guess that a solitary "2" is output. The END block closed over the $x and the last value that $x obtained was 2. my humble guesses, -Scott -- Jonathan Scott Duff [EMAIL PROTECTED]