2014-03-03 45 views
1

使用未初始化值警告我有下面的代碼行,在Perl

foreach ($abc) { 
    my ($match) = $_ =~ /([0-9]{5}(?!.*([0-9]{5})))/; 
    $zipCode_count{$match} += 1 if $match ne ''; 
} 
當我執行它

,它不斷拋出這樣的警告:

字符串NE使用未初始化值$比賽at parseZipCode.pl line 8,line 51.

我該如何擺脫它?謝謝

+0

請使用'\ d'爲'[0-9]'爲好的正則表達式。這可能意味着您的$ abc不是數組或者您的引用是空的等等 – alexmac

+0

@alexmac感謝您的建議:D – photosynthesis

+0

只是真的有助於提高可讀性'/(\ d {5}(?!。*(\ d {5})))/' – alexmac

回答

1

$matchundef如果正則表達式匹配失敗。 $match不可能是空字符串。

建議的修復:跳過循環如果匹配failes:

my ($match) = /(...)/ or next; 
$zipCode_count{$match}++; 

可替換地,狀態改變到

$zipCode_count{$match}++ if defined $match; 

附加說明:

  • 增量++是通常在優選+= 1
  • 一個正則表達式默認
  • zipCode_count匹配agains $_是一個非常可怕的變量名 - 要麼使用camelCasesnake_case,但請不都在同一時間!
+0

非常感謝 – photosynthesis