Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

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

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
Domain Nodelet?
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 about the Monastery: (1)
As of 2022-07-01 22:12 GMT
Find Nodes?
    Voting Booth?
    My most frequent journeys are powered by:

    Results (102 votes). Check out past polls.