in reply to "eval" and "my" variable weirdness
Here's another example:
If one runs foo.pl, the output is# foo.pl use strict; use warnings; require 'bar.pl'; frobozz( 2 ); __END__ # bar.pl use strict; use warnings; { my $x; # same thing with "my $x = 'whatever';" frobozz( 1 ) unless caller; sub frobozz { ( $x ) = @_; print 'NOT ' unless defined eval( '$x' ); print "OK\n"; quux(); } sub quux { # $x = $x; print 'NOT ' unless defined eval( '$x' ); print "OK\n"; } } 1; __END__
OK NOT OK...meaning that frobozz sees $x but quux doesn't. If one uncomments the commented line in quux or runs bar.pl directly, the output is
OK OK
(This is true for both 5.8.6 and 5.8.8 on Linux.)
After re-reading the docs on eval, I can't see how a programmer can be expected to predict this behavior. Therefore, it is, at the very least, a design bug, IMO.
the lowliest monk
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: "eval" and "my" variable weirdness
by japhy (Canon) on Jun 29, 2006 at 16:50 UTC |
In Section
Seekers of Perl Wisdom