I'd like to expand upon this correct answer. It seems like a really weird distinction if you aren't familiar with Perl's filter-writing magic.
while (<DATA>) { ... }
One might think that the above code is equivalent to this:
@foo = <DATA>;
while (@foo) { ... }
In reality, due to Perl's magical way of helping you implement simple STDIN-to-STDOUT text file filters, the first snippet is rephrased internally to mean the following:
while (defined ($_ = readline(*DATA))) { ... }
Thus,
while () isn't taking a list, or even what looks like a list. It's taking a condition, the condition being the successful ability to read a single line from a filehandle (and if successful, assigning the line to
$_ for checks inside the loop).
--
[ e d @ h a l l e y . c c ]