3

Mail :: POP3Clientにサンプルのスニペットがあり、その構文の一部が、その理由や動作方法がわかりません。

foreach ( $pop->Head( $i ) ) {
    /^(From|Subject):\s+/i and print $_, "\n";
}

特に正規表現ビット。$_その行の後も同じままですが、一致するものだけが出力されます。追加の質問; その正規表現の一致を自分のスカラーに割り当てて、単に印刷する代わりにそれを使用できるようにするにはどうすればよいですか?

4

1 に答える 1

4

これは実際にはかなりトリッキーです。それがやっていることは、perl の短絡機能を利用して条件ステートメントを作成することです。と言っているのと同じです。

if (/^(From|Subject):\s+/i) { 
    print $_;
}

perl は、何かが 0 に評価された後に and ステートメントの評価を停止するため、機能します。また、特に指定しない限り、フォーム内の正規表現では/regex/なく$somevar =~ /regex/、正規表現をデフォルト変数に適用します。$_

こんな感じで収納できます

my $var;    
if (/^(From|Subject):\s+/i) { 
        $var = $_;
}

またはキャプチャグループを使用できます

/^((?:From|Subject):\s+)/i

全体を格納します$1

于 2012-08-01T17:27:12.003 に答える