Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^4: How to process multiple input files?

by John M. Dlugosz (Monsignor)
on May 23, 2011 at 17:22 UTC ( #906324=note: print w/ replies, xml ) Need Help??


in reply to Re^3: How to process multiple input files?
in thread How to process multiple input files?

No, it tests for normal Truth. An undef, an empty string, a "0" etc. will all test as False after being assigned to $line.


Comment on Re^4: How to process multiple input files?
Re^5: How to process multiple input files?
by Anonymous Monk on May 23, 2011 at 18:48 UTC
    Check your answers, its easy :)
    $ perl -le " while ( my $line = <> ) { 1 } print $. " 0 0 0 0 ^Z 4 $ perl -MO=Deparse -le " while ( my $line = <> ) { 1 } print $. " BEGIN { $/ = "\n"; $\ = "\n"; } while (defined(my $line = <ARGV>)) { do { '???' }; } print $.; -e syntax OK
      It's not a problem with normal line-oriented use because the \n character is present on the end of every line with the possible exception of the last which then won't be empty. You got "0\n" in the string, not an empty string, not "0" alone.

      Try something like: while ( my $line = <> ) { say !!($line) } print $. and you'll see that each read is True as well as being defined.

      Recall as I explained originally, I'm concerned with totally empty files causing an empty string and testing false, or (less likely because it doesn't look like an xml file) a file containing a 0 only and no terminating end-of-line.

      However, I do stand corrected, after checking the perl IO reference: I was thinking that the special meaning of Truth applied only to implicit assignment to $_ in the condition. However, the 5.14 docs does indeed say "the assigned value (whether assignment is automatic or explicit) is then tested to see whether it is defined...".

        It's not a problem with normal line-oriented use because the \n character is present on the end of every line with the possible exception of the last which then won't be empty. .... Try something like

        Its not a problem at all as B::Deparse shows. The idea was for you to try it

        $ perl -lE " open ARGV, q[<], \qq[0$/0$/0]; while ( my $line = <> ) { +say q[!!],!!($line) } say $. " !!1 !!1 !! 3
        or
        $ perl -e " print qq[0\n0\n0] " > 3zeros $ od -tacx1 3zeros 0000000 0 cr nl 0 cr nl 0 0 \r \n 0 \r \n 0 30 0d 0a 30 0d 0a 30 0000007 $ perl -le " while ( my $line = <> ) { 1 } print $. " 3zeros 3 $ perl -E " while ( my $line = <> ) { say q[!!],!!($line) } say $. " +3zeros !!1 !!1 !! 3

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (16)
As of 2014-07-30 13:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (232 votes), past polls