2011-02-24 43 views

回答

9

您的代碼中有幾個語法錯誤,這些錯誤導致了意外的結果。

首先,如果你想要一個空數組,你需要寫:

# Correct (creates an empty array) 
my @array =(); 

# Incorrect (creates a one-element array containing a reference to an empty array) 
my @array = []; 

# Incorrect (creates a one-element array containing the undef element) 
my @array = undef; 

您還需要扭轉grep的狀態 - 正則表達式應該在=~運營商的右側:

perl -e '@arr =(); print "HELLO." unless grep { $_ =~ /asdf/} @arr;' 

如果您進行了這兩項更改,代碼將完成您的預期。

+3

「my @array;」創建一個空數組。有些人認爲「我的@array =();」更清楚些,但前者足夠,更加完美。 – runrig 2011-02-25 00:37:42

2

我認爲你想grep {$ _ =〜/ asdf /}。 =〜左邊的值是匹配的值,右邊是正則表達式。這可以進一步簡化爲grep {/ asdf /},因爲默認搜索$ _。

正如你所寫,你試圖匹配一個undef模式與正則表達式值。匹配運算符(我相信)在模式爲undef時總是返回true。

相關問題