given
ブロックの外側にあるwhen
の文については、ドキュメントが疎であるようです。 when
は 'トピック'が設定されているときに使用できますが、正確にトピックが設定されていると判断されたときは使用できますか?これらのケースを考えてみます。Perl 5で 'when'文を使用できる条件は何ですか?
for (@arr) {
when { }
}
が、これはデフォルト、基本ケース、ですが、私は5.14.2私のperlの上でも、この作業を取得できなかったようだ - これは単なるバッシュ引用問題であることが判明しました。$ perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'
は何も出力しません。私は間違って何をしていますか?
for my $elem (@arr) {
when { }
}
これは機能しますか? when
が自動的に$ elemを使用してトピックになりますか?
for (@arr) {
$_ = some_expression($_);
when { }
}
これは機能しますか?ループ内でトピックを設定できますか?
また、上記の各コードセグメントでfor
の代わりにforeach
を使用すると、違いはありますか?
基本的にはトピックのトピックが非常に不明なので、教えてください。
私は常に引用符で間違っている、ありがとう。 あなたの他の回答へのリンクをありがとう、そこからのリンクがステータスをより良く理解するのに役立ちました。 私は、これと一緒に奇妙なケースがあります: 'perl -E '@arr = qw(a b c); foreach $ x(@arr){$ _ = $ x; $ _ ++; (/ b /){print $ x}} '' ' これは、期待どおりに印刷されますが、「-e line 1でトピカルライザーの外では使用できません」というエラーで死んでしまうようです。 $ _で2行を削除すると、同じコードがエラーなく実行されますが(何も印刷されません)。ここで何が起こっているのか説明できますか? – sundar
@sundar、問題は引用符の選択ではありません。問題は、あなたが正しくエスケープしなかったことです。更新を参照してください。 – ikegami
このエスケープ構文は新しくて便利です。ありがとう。 トピック化に関して、その理由は、 "$ _で2つの行を削除すると、同じコードがエラーなく実行される"ということです。 for/foreachループは、たとえSOMETHING(...)のものであっても、トピカルライザーとして扱われるようですが、ループの中で$ _に代入すると何とかそれを取り除きます。 – sundar