Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

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

by japhy (Canon)
on Dec 17, 2001 at 08:35 UTC ( [id://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:??;

Replies are listed 'Best First'.
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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://132467]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (4)
As of 2024-03-28 17:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found