我正在查看具有以下语法的代码:
@match = grep {/$sometext/-iP} @$myarray;
我知道 -i 找到匹配忽略大小写。“P”具体是什么意思?
该代码不正确。可能作者将 Perl 的内置grep
函数与grep
命令行工具混淆了。
在GNUgrep
中,该-i
选项使其不区分大小写地匹配,并-P
告诉它使用 Perl 样式的正则表达式。
在 Perl 中,这是:
@match = grep {/$sometext/-iP} @$myarray;
几乎可以肯定是不正确的(尽管正如 TLP 在评论中指出的那样,它可以被解释为-
是减法并且iP
是函数调用)。
Perl 正则表达式已经是 Perl 风格的,所以P
没有必要。
可能打算是这样的:
@match = grep { /$sometext/i } @$myarray;
或者,更简单地说:
@match = grep /$sometext/i, @$myarray;
请注意,i
限定符适用于模式匹配/$sometext/
,而不适用于grep
. 有关该功能的更多信息,
请参阅。perldoc -f grep
grep