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

Re^3: capture vars undef

by Chady (Priest)
on Jul 28, 2004 at 06:20 UTC ( #377937=note: print w/ replies, xml ) Need Help??


in reply to Re^2: capture vars undef
in thread capture vars undef

They haven't gone out of scope. Here's an attempt at explaining that:

In the first example, you have two if blocks, the first if block provides a new scope for the second block, so what you have is something like this:

# provided by the outermost if $1 = undef; $2 = undef; $3 = undef; { # provided by the inner if $1 = 'aa'; $2 = 'bb'; $3 = 'cc'; }

Note that one if block will not kill the $<digit> vars, but once the inner block finishes, then its variables are destroyed, and you get the outer block's $<digit>s

Here's an example that might explain it better:

$_ = "aabbccdd"; if ( /^(\w\w)\w\w(\w\w)\w\w$/ ) { if ( /^\w\w(\w\w)\w\w(\w\w)$/ ) { print "inner: $1 $2\n"; } print "mid: $1 $2\n"; # the inner if's vars are still accessible h +ere } print "outer: $1 $2\n";

This will print aa cc and not your expected bb dd in the outer block.

Update: here's another way to think of it:

$_ = "aabbccdd"; /^(\w\w)\w\w(\w\w)\w\w$/; { /^\w\w(\w\w)\w\w(\w\w)$/; { print "inner: $1 $2\n"; } print "mid: $1 $2\n"; } print "outer: $1 $2\n";

He who asks will be a fool for five minutes, but he who doesn't ask will remain a fool for life.

Chady | http://chady.net/


Comment on Re^3: capture vars undef
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (13)
As of 2015-07-28 12:06 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 (254 votes), past polls