Mail::POP3Client中有一个示例代码段,其中包含一段语法,我不明白为什么或如何工作:
foreach ( $pop->Head( $i ) ) {
/^(From|Subject):\s+/i and print $_, "\n";
}
特别是正则表达式。 $_
在该行之后保持不变,但仅打印匹配。
另一个问题;我如何将该正则表达式的匹配分配给我自己的标量,以便我可以使用它而不是仅仅打印它?
答案 0 :(得分:4)
这实际上非常棘手。它正在做的是利用perl的短路功能来制作条件语句。这跟说这个一样。
if (/^(From|Subject):\s+/i) {
print $_;
}
它起作用是因为perl在评估为0之后停止计算和语句。除非另有说明,/regex/
而不是$somevar =~ /regex/
形式的正则表达式将正则表达式应用于默认变量{{1 }}
你可以像这样存储它
$_
或者您可以使用捕获组
my $var;
if (/^(From|Subject):\s+/i) {
$var = $_;
}
将整件事存入/^((?:From|Subject):\s+)/i