JadeNB has asked for the wisdom of the Perl Monks concerning the following question:
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. :-)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Vexing views of variables
by QM (Parson) on Aug 07, 2009 at 18:43 UTC | |
by JadeNB (Chaplain) on Aug 07, 2009 at 18:51 UTC | |
|
Re: Vexing views of variables
by ig (Vicar) on Aug 07, 2009 at 19:24 UTC | |
by JadeNB (Chaplain) on Aug 07, 2009 at 19:33 UTC | |
|
Re: Vexing views of variables
by Marshall (Canon) on Aug 07, 2009 at 19:43 UTC | |
by JadeNB (Chaplain) on Aug 07, 2009 at 19:46 UTC |