Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: while nested in foreach ($_ pitfalls)

by Russ (Deacon)
on Dec 01, 2003 at 17:54 UTC ( #311333=note: print w/replies, xml ) Need Help??


in reply to while nested in foreach

When I read the subject ("while nested in foreach"), I thought this would be a different problem. Just for grins, here is a "gotcha" to watch for: resetting $_.
for (1..10){ print "Before nested \$_ setter: $_\n"; open JUNK, 'junk' or die "Nope: $!"; while(<JUNK>){ # Do nothing, just let $_ get set } close JUNK; print "After nested \$_ setter: $_\n"; }
In this example (perl 5.8.0), the second print statement shows an empty $_ because the diamond operator (in the while loop) overwrote $_ (as we told it to do). So, after the nested while loop, we no longer have the old value in $_ (the counter in the for loop).

Exercises left for the reader: replace the while loop with other $_-using constructs and see how they behave...

Most perl built-ins, and many CPAN modules, are "smart" enough to localize $_ to prevent confusion, but not all.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (5)
As of 2022-05-25 19:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (90 votes). Check out past polls.

    Notices?