私はperlで理解していないいくつかの行動を取得しています:
>>> my @words = ('hello', 'there');
>>> $words[0] =~ /(el)/; print $1;
el
>>> $words[1] =~ /(el)/; print $1;
undef
が、ループ内:
>>> my @words = ('hello', 'there');
>>> foreach my $word (@words){
>>> $word =~ /(el)/;
>>> print "$1\n";
>>> }
el
el
ここで何が起こっていますか?そして、どのようにこのような何かが動作するように、それは、最新の正規表現に一致しない場合、私は、ループ内で、$ 1は未定義するために得ることができます:
foreach my $word (@words) {
$word =~ /(el)/;
if ($1) {
print "$word matched\n";
} else {
print "$word did not match\n";
}
}
私が使用しているロジックをしたいので、成功したマッチに変更されたばかりの印刷よりも少し複雑です試合。それは何が起こっているのかを理解しようとしていた単純なケースでした。私がしたいことをする方法はありますか?つまり、$ 1、$ 2(または何か他のもの)を設定したときに、それを設定し、一致するものがなければ 'undef'に設定します。 – ewok
'my($ capture)= $ word =〜/(el)/'と 'my $ capture = $ word =〜/(el)/? $ 1:undef; '$ 1'を設定したいと言った方法で' $ capture'を設定します。 – ikegami
完璧。それは、 'my @matches = $ word =〜/(リスト)(of)(match)(patterns)/;'の行に沿って何かを使って一致の配列を得ることができるということですか? – ewok