-1
print !grep { 3 == $_ } 2, 3, 8;

我什么也得不到。

我见过这个用过。

if (!grep { /^#EXTINF:/ } @lines) 

更糟糕的是,很难在 Google 或 Duckduckgo 上搜索 !grep,因为搜索不会搜索 !。我只能找到一些 Perldocs 中的代码。

4

2 回答 2

3

grep 返回:

  • 在数组上下文中,包含使条件为真的元素的数组 ( 3 == $_)
  • 在标量上下文中,grep 已过滤的数组元素的数量

此外,!是一个 perl 否定,所以如果你有一个真值(如 1),它会转换为一个假值

展开您的代码:

my $a = grep { 3 == $_ } 2, 3, 8; #<-- $a takes 1 (only one element satisfies the condition)
print ! $a; #<-- prints nothing
于 2013-08-19T12:48:24.227 回答
1

之间有细微的差别

grep !/foo/, @bar

如果数组 @bar 为空,则此测试将不返回任何内容。如果@bar 包含元素,则此测试将返回标量上下文中不匹配元素的数量,或列表上下文中匹配元素的数组。

和,

!grep /foo/, @bar

如果数组 @bar 为空或包含任意数量的不匹配的元素,则此测试将在标量上下文中返回 1。如果 @bar 包含任何匹配的元素,则此测试将不返回任何内容。

于 2013-12-13T16:04:02.563 回答