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 reply to Re: Why/how are these different?
by Athanasius
in thread Why/how are these different?
by perl-diddler
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |