Beefy Boxes and Bandwidth Generously Provided by pair Networks chromatic writing perl on a camel
XP is just a number
 
PerlMonks  

Re: Re: Re: When does while() test for defined vs truth

by japhy (Canon)
on Dec 17, 2001 at 08:35 UTC ( #132467=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: When does while() test for defined vs truth
in thread When does while() test for defined vs truth

When Perl sees you using <FH> or $var = <FH> in a while (or until), it will insert the defined() for you. From perlop in bleadperl:

The following lines are equivalent:
while (defined($_ = <STDIN>)) { print; } while ($_ = <STDIN>) { print; } while (<STDIN>) { print; }
(...)

In these loop constructs, the assigned value (whether assignment is automatic or explicit) is then tested to see whether it is defined. The defined test avoids problems where line has a string value that would be treated as false by Perl, for example a "" or a "0" with no trailing newline.

_____________________________________________________
Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;


Comment on Re: Re: Re: When does while() test for defined vs truth
Select or Download Code
Re4: When does while() test for defined vs truth
by blakem (Monsignor) on Dec 17, 2001 at 08:46 UTC
    I noticed that the behavior was consistant for filehandle reads, which is why I found the behavior of globbing perplexing...

    The following lines are equivalent to each other:

    while (<STDIN>) { print; } # tests for definedness print while <STDIN>; # tests for definedness
    But these two are not equivalent to each other:
    while ($_ = <*>) { print } # tests for definedness print while ($_ = <*>); # tests for truthfulness
    Update -- Here is an example in action:
    % mkdir newdir % cd newdir % touch 0 1 2 % ls 0 1 2 % perl -le 'while ($_ = <*>) { print }' 0 1 2 % perl -le 'print while ($_ = <*>)' [note nothing is printed here]

    -Blake

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2014-04-20 16:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (485 votes), past polls