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

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 |

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://377937]
Discipulus never noticed there was subtitles... can I call them with &subtitle or is too much perl 4?
[LanX]: YT=youtube
[Discipulus]: ;=) yes i'm not SO dumb
[LanX]: SO=StackOverflow
[Discipulus]: :=(

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (8)
As of 2017-06-23 16:39 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (552 votes). Check out past polls.