in reply to Why/how are these different?
Perl has two for loops:
C-style: for (...; ...; ...) { ... }
List-style (foreach): for (LIST) { ... }
Only the second (“foreach”) is available as a statement modifier:
EXPRESSION for LIST;
So in the second example, the code is effectively:
printf "_=%s\n", $_ for $_ = 3; $_-- > 0;
The first line prints _=3, the second line decrements $_ but has no other effect.
Update: Even for one-liners, you should turn on warnings:
perl -wE ...
This often gives an insight into what Perl understands your code to be. For example:
13:44 >perl -wE "printf qq[_=%s], $_ for $_ = 3; $_-- > 0;" Useless use of numeric gt (>) in void context at -e line 1. _=3 13:45 >
Hope that helps,
Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In Section
Seekers of Perl Wisdom