Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Does while localize $_?

by danger (Priest)
on Mar 19, 2001 at 00:07 UTC ( #65294=note: print w/replies, xml ) Need Help??


in reply to Does while localize $_?
in thread What would you do?

A foreach loop does implicitly localize $_ (or whatever variable is being used as the loop variable), but $_ is not automatically localized for while(<>) loops. Here is the relevant entry from the perlop manpage:

Ordinarily you must assign the returned value to a vari- able, but there is one situation where an automatic assignment happens. If and only if the input symbol is the only thing inside the conditional of a `while' state- ment (even if disguised as a `for(;;)' loop), the value is automatically assigned to the global variable $_, destroy- ing whatever was there previously. (This may seem like an odd thing to you, but you'll use the construct in almost every Perl script you write.) The $_ variables is not implicitly localized. You'll have to put a `local $_;' before the loop if you want that to happen.

However, that last line is misleading: you'll need to wrap it all in a block, or localize $_ in the while condition to get the proper effect:

{ local $_; while(<>){ print; } } # or, while(local $_ = <>) { print; }

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2020-11-26 07:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?