prints (1), as one would expect. However, that void-context $v looks mighty silly, so we might try commenting it out:{ my $v = 1; sub mk_view_v { $v; sub { $v }; } } print "(", mk_view_v()->(), ")\n";
Now we print just () (UPDATE: with a complaint about undefined variables, if we are well behaved and use warnings).{ my $v = 1; sub mk_view_v { # $v; sub { $v }; } } print "(", mk_view_v()->(), ")\n";
I can't come up with anything but fanciful guesses for why this happens, but note that
still sees the declared value of $v, and still stops seeing it if one comments out the $v line.{ my $v = 1; sub mk_mk_view_v { $v; sub { sub { $v } }; } } print "(", mk_mk_view_v()->()->(), ")\n";
By the way, "This is perl, v5.8.9 built for darwin-2level" (installed via MacPorts). The behaviour seems to have gone away in 5.10.0.
UPDATE: Thanks to QM for pointing out that $a was a bad choice of variable. I changed it to $v, and made the subroutine names slightly more informative while I was at it. :-)
In reply to Vexing views of variables by JadeNB
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |