Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: "eval" and "my" variable weirdness

by tlm (Prior)
on Jun 29, 2006 at 16:41 UTC ( #558373=note: print w/ replies, xml ) Need Help??

in reply to "eval" and "my" variable weirdness

Here's another example:

# use strict; use warnings; require ''; frobozz( 2 ); __END__ # 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__
If one runs, the output is
...meaning that frobozz sees $x but quux doesn't. If one uncomments the commented line in quux or runs directly, the output is

(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

Comment on Re: "eval" and "my" variable weirdness
Select or Download Code
Replies are listed 'Best First'.
Re^2: "eval" and "my" variable weirdness
by japhy (Canon) on Jun 29, 2006 at 16:50 UTC
    Again, the "problem" is that, when is require()d, Perl has to make some scope decisions. The quux() function doesn't make any claims to $x, so it's not a closure around $x. frobozz() is a closure around $x.

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://558373]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (2)
As of 2015-10-10 11:18 GMT
Find Nodes?
    Voting Booth?

    Does Humor Belong in Programming?

    Results (255 votes), past polls