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