2012-03-06 66 views
-2

我在數據庫中更新幾個記錄。所有的處理都在eval塊中完成。 問題是,即使記錄成功更新,我仍然看到引發異常。perl的EVAL拋出異常空白

要調試例外,我嘗試使用數據自卸車打印出來,但例外的是空白。

任何一個可以請幫我鑑定這是什麼錯誤,爲什麼它拋出每一次?

環境細節(Perl的5.8和Unix SUSE)從數據自卸車

轉儲:

$VAR1 = ' 
'; 

我使用不同的內部API,來更新這些記錄..所以我修改我的代碼看類似的:

 sub main{ 
     eval{ 
     DB->updateRecord($value) 
     }; 
     if([email protected]){ 
      Mail->SendMail(__PACKAGE__,[email protected]): 
     } 
     } 

     package DB; 
     sub updateRecord{ 
      my ($self , $value) = @_; 
      my $query = "update set column_value = $value ..<update query> "; 
      API->processQuery($query); 
     } 
+0

你能在這裏發佈的代碼,所以我們也許能揭示局勢一些輕? – CanSpice 2012-03-06 19:06:03

+3

如果沒有一些代碼,你的問題就會被降低並可能被關閉。請閱讀[常見問題]和[問]。 – 2012-03-06 19:10:32

+2

該轉儲不是空白的,它包含一個換行符,它不被認爲是false/empty。 – TLP 2012-03-06 19:13:30

回答

7

請問您的代碼是use warnings;

您描述的症狀表明在您的代碼中,您正在通過die字符串"\n"。我的猜測是,在你的源代碼中你有一條嘗試死於錯誤消息的行,但是你的錯誤消息沒有被初始化。這可能是一些像

my $error; 
if (some_test()) { 
    $error = 'Some String'; 
} 
if (some_other_test()) { 
    die "$error\n"; 
} 

如果some_test()通行證,但some_other_test()失敗的模具將報告只包含一個新行的錯誤。如果警告已啓用,它也會發出警告。

另一種可能性是一個錯字。如果您沒有use strict;錯誤變量可能不正確。

my $error = 'Some String'; 
if ($error) { 
    #note the typo (transposed ro to or) 
    die "$erorr\n"; 
} 

沒有use strict;這可能是一個容易犯錯的錯誤。

+0

檢查了內部API並發現相同的錯誤....非常感謝! – 2012-03-06 20:07:43

+0

對於'eval'來說''@''是非常可能的。 (在5.14或5.16中修正)如果你知道這一點,並認爲它更可能是一個不同的錯誤,你說得對,哇! – ikegami 2012-03-06 21:25:49

+0

@ikegami,症狀是'$ @ =「\ n」'Perl中的cobber錯誤通常會留下'$ @ = undef'。如果你對我的邏輯感興趣,可以在$ @中得到「\ n」,這個人可能有效地稱爲「死」\ n「;',但他們可能沒有寫這個。那麼,一個典型的錯誤會產生什麼呢?這可能是插入到字符串中的未初始化值。這導致,爲什麼沒有警告? – 2012-03-06 23:00:59