我正在查看具有以下语法的代码:
@match = grep {/$sometext/-iP} @$myarray;
我知道-i找到一个忽略大小写的匹配。 “P”指定了什么?
答案 0 :(得分:2)
该代码不正确。可能作者将Perl的内置grep
函数与grep
命令行工具混淆。
在GNU grep
中,-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
。
有关grep
功能的详细信息,请参阅perldoc -f grep
。