2013-08-19 82 views
-1
print !grep { 3 == $_ } 2, 3, 8; 

而我什麼也得不到。!grep在perl中做什麼?

我見過這個用過。

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

更糟糕的是,很難搜索在谷歌或Duckduckgo!grep的,因爲搜索不搜索!我能找到的只是Perldocs中的幾個代碼。

+5

提示:'!' - >「not」。現在,只需搜索「perl grep」。或者更好的是,'perldoc -f grep'。 :P – cHao

+2

Omg我想通了。謝謝。 – raz

+2

請用你的發現回答你自己的問題。謝謝。 – philshem

回答

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

grep !/foo/, @bar 

之間的細微差別。如果陣列@bar爲空,則本次測試將返回什麼。如果@bar包含元素,則此測試將返回標量上下文中不匹配元素的數量,或者返回列表上下文中匹配元素的數組。

和,

!grep /foo/, @bar 

如果數組@bar爲空或包含任意數量的非其中匹配的元素,則此測試將在標量上下文返回1。如果@bar包含任何匹配的元素,那麼這個測試將不會返回任何內容。