2

これで結構です:

$foo++ if $condition;

そしてこれは大丈夫です:

$foo++ for (1..10);

しかし、これはそうではありません:

$foo++ if $condition for (1..10);

物事が複雑でなければ、後者は非常に読みやすく、1行に収まります。これを行う方法はありますか、それとも私は自分の人生を続けるべきですか?

4

3 に答える 3

12

ステートメントごとに1つの接尾辞操作のみを持つことができます。しかし、あなたはブロックを使用することによってあなたが望むことをすることができます(sorta)do、例えば

do { $foo++ if $condition } for ( 1..10 );

個人的には、このスタイルは非常にわかりにくく、読みにくいと思います。もし私があなたなら、私はそれを避けたいと思います。あなたがそのすべての問題に取り組むつもりなら、あなたは言うかもしれません

for( 1..10 ) { $foo++ if $condition }

私見では。

于 2009-07-07T16:00:30.753 に答える
3

ifステートメントと同じ効果を達成する別の方法は、andであるため、次のように言うことができます

$condition and $foo++ for 1 .. 10;

ただし、これは推奨される方法ではありません。

于 2009-07-07T16:27:04.553 に答える
2

私が理解しているように、これは、Perlのごく初期の頃の意図的な設計上の決定であり、人々が読みにくい、または正しいコードを取得するのが難しいことを避けるためのものでした。Perl 6は少なくともいくつかの組み合わせを許可し(if/forとfor/ifですが、for/forまたはif/ifかもしれませんか?)、Perl5はある時点でそれに続くと思います。

更新:Perl 6は、ループ内で条件付きを許可します(例EXPR if EXPR for LIST)。それ以上のものには追加の括弧が必要です(例( EXPR for LIST ) if EXPR)。

于 2009-07-08T17:37:10.247 に答える