-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 に答える