Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re^3: uninitialized value $_

by Paladin (Vicar)
on Mar 28, 2016 at 17:16 UTC ( #1158967=note: print w/replies, xml ) Need Help??

in reply to Re^2: uninitialized value $_
in thread uninitialized value $_

<>; just reads a line and throws it away. Perhaps you meant $_ = <>;?

Replies are listed 'Best First'.
Re^4: uninitialized value $_
by Anonymous Monk on Mar 28, 2016 at 18:42 UTC
    That works. I thought (incorrectly obviously) that $_ automatically was assigned the last line read. I recall seeing examples like that, but maybe it was only for reading from files.
      > $_ automatically was assigned the last line 

      That's a special DWIM magic within the while condition only!

      while (<>) {

      ... which is Perl shorthand for the more explicitly written version: ...

      while (defined($line = <ARGV>)) {

      Cheers Rolf
      (addicted to the Perl Programming Language and ☆☆☆☆ :)
      Je suis Charlie!

        ... but not documented under while, but in perlop under "I/O-Operators" (where the internal link anchor seems not to work)
      Perhaps a better thought model is that $_ gets assigned the last thing read. At the end of the file, that last thing is the EOF, which is returned as undef.

      The fundamental problem here was poor loop design. The use of for(;;){} or while (1){} should be restricted to very special circumstances like an infinite loop in server code to wait for next connection, etc. If the loop is coded differently and I would argue properly, as corion suggests, while (<>){}, this handling undef inside the loop problem goes away.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (2)
As of 2022-05-21 05:55 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (76 votes). Check out past polls.