2012-07-10 99 views
1

在我的Perl程序中,我正在通過解碼將它分解爲數組來讀取電子郵件。在下面的代碼片段中,我正在閱讀元素並添加它,直到找到'Email'或'Phone'或'GoToAssist'。將元素附加到數組元素中

75 while(!($plain[$j] =~ /[Email|Phone|GoToAssist]/)){  
76  $plain[$x] .= " " . $plain[$j]; 
77  $j++; 
78 } 

不過,我收到以下錯誤:

Use of uninitialized value in concatenation (.) or string at test.pl line 76, <GEN0> line 921. 
Use of uninitialized value in pattern match (m//) at test.pl line 77, <GEN0> line 921. 

的代碼是正常以前的工作,我幾乎沒有改變任何東西。我想知道出了什麼問題。

+0

您是否檢查過您的數據是否已更改? – Joel 2012-07-10 14:11:38

+0

是的,我查過了。兩個因素被改變了。但我已經使用正則表達式去除它們。它也不適用於以前的數據。 – 2012-07-10 14:12:59

+1

如果它以前工作和數據JUST已更改 - 它必須是正則表達式不能正常工作,以消除更改的數據的錯誤部分。我的意思是,我沒有經驗證據......但除此之外,哈哈。我們可以得到和示例條目? – PinkElephantsOnParade 2012-07-10 14:15:52

回答

0

$plain[$j]是undef。添加一些打印語句,以確定$j是否符合您的期望。如果它是錯誤的,那麼找出它爲什麼會以錯誤的價值結束。它是正確的,找出爲什麼$plain[$j]結果與錯誤的價值。

+0

我試過了。它給了我一百萬個 之後的錯誤。抱歉。 – 2012-07-10 14:18:21

+0

print「plain [x] ='」。 ($ plain [$ x] ||'')。 「'\ n」;打印「plain [y] ='」。 ($ plain [$ y] ||'')。 「'\ n」; – beresfordt 2012-07-10 14:23:28

+0

我明白了[j] ='' 和普通[x]大約有一千個 的 – 2012-07-10 14:27:49

3

它不是一個錯誤,它是一個警告。

您收到此警告,因爲$plain[$j]未定義。

您可以使用下面的代碼來檢查,如果plain[$j]被定義或不追加前:

while(!($plain[$j] =~ /[Email|Phone|GoToAssist]/)){  
    if(defined $plain[$j]){ 
     $plain[$x] .= "&nbsp;" . $plain[$j]; 
     $j++; 
    } 
} 

如果這沒有幫助,也分享一些更多的代碼。

而@Borodin指出,你的正則表達式並沒有做你可能想要的。但這與你的問題無關。

+0

那麼,那實際上工作!但是,當我評論這些變化時,它再次發揮作用!我不知道說實話怎麼回事。你可以在這裏找到我的代碼:https://gist.github.com/3083791你可以看到註釋語句行#77以上。謝謝。 – 2012-07-10 14:55:25

+0

@rad你確定你已經使用了與之前提供的錯誤相同的數據嗎? – AnonGeek 2012-07-10 15:03:00

+0

是的,它是相同的數據! – 2012-07-10 15:07:58