http://www.perlmonks.org?node_id=1016199


in reply to Why/how are these different?

Perl has two for loops:

  1. C-style: for (...; ...; ...) { ... }

  2. 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,