Perlで単一行foreach
ループを使用することはできますか?Perl foreachループを1行に書くことは可能ですか?
$hash{$thing}++ foreach my $thing (@things);
私はオープン文は多分壊れていることを知って、これは、このような
die "Invalid file!\n" if (open($Handle, "file.txt"));
、他の多くのコマンドで可能です知っている:)
Perlで単一行foreach
ループを使用することはできますか?Perl foreachループを1行に書くことは可能ですか?
$hash{$thing}++ foreach my $thing (@things);
私はオープン文は多分壊れていることを知って、これは、このような
die "Invalid file!\n" if (open($Handle, "file.txt"));
、他の多くのコマンドで可能です知っている:)
ほとんど。 foreachのサフィックスでは、$ _を使用する必要があります。
$hash{$_}++ foreach @things;
または同等に(for
とforeach
以来構文については、エイリアスされている):
$hash{$_}++ for @things;
+1と簡潔さのために 'のために'。 –
私はちょうど私が投稿した後に気づいたが、迅速な返信に感謝します。私は単一のステートメントで名前付き変数が少し不合理であることを認識しました。 –
この構文が文書化されているところを教えてください。 perlsynのページはこれを言及しません。 – user907860
はあなたが行うことができます。
foreach my $thing (@things) {$hash{$thing}++};
場合レキシカルスコープの変数で1行に書いておきます。 foreach
を反転してループスコープの変数を保持することはできません。
"foreachを逆転してループスコープの変数を保持することはできません。"その名前ではなく、いいえ、だから何ですか? 1行の 'foreach'には名前付き話題化装置は必要ありません。 '$ハッシュ{$ _} ++は@物事のために'ハッシュ**それは**各事柄、またはより多くの英語、ハッシュ**の**事を言います。 '$ _'は" it "と読むべきです。そして、 "it"はループスコープの変数になることが保証されています。さらに、それはループ** IFF **に語彙的にスコープされたブランドの新しいプライベート変数になります。その名前の既存のレキシカル(すでに '$ _')がすでにスコープ内にあり、それ以外の場合は動的スコープがあれば。どちらもループスコープです。 – tchrist
@Zaid: "インラインループ"?たぶんそれは私のものかもしれませんが、私は以前のタイトルがもっとわかりやすいと感じました。:/ – musiKk
@musiKk:Revised。あなたの2番目のステートメントで – Zaid
: 'if'を' unless'に変更するか、より一般的なイディオム(と3arg openとレキシカルハンドル)を使用します 'open $ handle、 '<'、 'file.txt' $! ";"もちろん、読み込みではなく書き込みのためにファイルを開く場合は '> ''を使用してください。 –