Mail::POP3Client中有一个示例片段,其中有一段我不明白它为什么或如何工作的语法:
foreach ( $pop->Head( $i ) ) {
/^(From|Subject):\s+/i and print $_, "\n";
}
特别是正则表达式位。$_
该行之后保持不变,但仅打印匹配项。一个附加问题;我如何将该正则表达式的匹配项分配给我自己的标量,以便我可以使用它而不是仅仅打印它?
Mail::POP3Client中有一个示例片段,其中有一段我不明白它为什么或如何工作的语法:
foreach ( $pop->Head( $i ) ) {
/^(From|Subject):\s+/i and print $_, "\n";
}
特别是正则表达式位。$_
该行之后保持不变,但仅打印匹配项。一个附加问题;我如何将该正则表达式的匹配项分配给我自己的标量,以便我可以使用它而不是仅仅打印它?
这实际上非常棘手。它所做的是利用 perl 的短路特性来做一个条件语句。这和说这个是一样的。
if (/^(From|Subject):\s+/i) {
print $_;
}
它之所以有效,是因为 perl 在某些事物评估为 0 后停止评估和声明。除非另有指定,否则表单中的正则表达式/regex/
而不是$somevar =~ /regex/
将正则表达式应用于默认变量,$_
你可以像这样存储它
my $var;
if (/^(From|Subject):\s+/i) {
$var = $_;
}
或者您可以使用捕获组
/^((?:From|Subject):\s+)/i
它将整个东西存储到$1