Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

(tye)Re2: Unusual Closure Behaviour

by tye (Cardinal)
on Jul 13, 2001 at 03:20 UTC ( #96228=note: print w/ replies, xml ) Need Help??


in reply to Re: Unusual Closure Behaviour
in thread Unusual Closure Behaviour

Actually, that code isn't doing what you think. One way to see is to just add "use strict" to it. You'll get: Global symbol "$x" requires explicit package name

A more fun way is:

sub foo { my $x= $_[0] if ! defined $x; print "(@_):", ++$x, " "; undef $x if @_ && shift; } foo($_) for( 0,0,5,4,3,0,5,0,4,0,3 ); print $/, $x= 10, $/; foo($_) for( 0,0,5,4,3,0,5,0,4,0,3 ); print $/;
which produces:
(0):1 (0):1 (5):6 (4):5 (3):4 (0):1 (5):6 (0):1 (4):5 (0):1 (3):4 10 (0):1 (0):2 (5):3 (4):1 (3):1 (0):1 (5):2 (0):1 (4):2 (0):1 (3):2
The $x in "if !defined $x" is the global $main::x because my variables can't be used until after the end of the statement in which they were declared.

So your code is always initializing the lexical $x in your subroutine because you have never defined the global $main::x that you are checking against.

        - tye (but my friends call me "Tye")


Comment on (tye)Re2: Unusual Closure Behaviour
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (15)
As of 2015-07-03 07:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (48 votes), past polls