AnomalousMonk has asked for the wisdom of the Perl Monks concerning the following question:
In a recent post, I saw a question about why
produced a "Use of uninitialized value $_ in pattern match (m//) ..." warning. This is easily fixed by assigning the value returned by the <> (diamond) operator (aka the readline function) to the appropriate variable:while () { <>; last unless /\S/; print FILE; }
(This example works the same under ActiveState 5.8.9 and Strawberry 5.14.4.)c:\@Work\Perl>perl -wMstrict -le "while () { $_ = <>; last unless /\S/; print qq{>$_<}; } " qeert >qeert < ghjk >ghjk <
What caught my eye was the null loop condition expression in the
while () { ...; last unless ...; ...; }
infinite loop. I would have thought of something along the lines of
while (1) { ...; last unless ...; ...; }
I'm surprised that a null loop condition expression is accepted by the compiler or, being accepted, that it evaluates as true. Because other boolean "nullities" (undef, the empty string, 0) are false, I would have expected a null condition expression, if it compiled at all, to be false. (A B::Deparse of while () { ... } shows it to compile to while (1) { ... } in both Perl versions I tried.)
So, my questions:
Give a man a fish: <%-{-{-{-<
|
---|