-3

我正在查看具有以下语法的代码:

@match = grep {/$sometext/-iP} @$myarray;

我知道 -i 找到匹配忽略大小写。“P”具体是什么意思?

4

1 回答 1

2

该代码不正确。可能作者将 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 grepgrep

于 2013-08-09T23:29:22.013 回答