什么!grep在perl中做什么?

时间:2013-08-19 07:47:14

标签: perl grep

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

我一无所获。

我见过这个。

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

之间存在细微差别
grep !/foo/, @bar

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

!grep /foo/, @bar

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