2012-03-06 9 views
-2

私はデータベース内のいくつかのレコードを更新しています。そしてすべての処理はevalブロックで行われます。 問題は、レコードが正常に更新されたとしても、引き続き例外が発生していることがわかります。perl eval throwing blank exception

例外をデバッグするには、Data Dumperを使用して印刷を試みましたが、例外は空白です。

このエラーが何であるかを特定するのに役立ちますが、いつもそれはいつもスローされますか?

環境詳細(Perlの5.8およびUnixのSUSE)データダンパーから

ダンプ:私は。これらのレコードを更新するために、様々な内部APIを使用していますので、私は見て自分のコードを変更した

$VAR1 = ' 
'; 

類似:

 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

+3

いくつかのコードがなければ、あなたの質問は下降し、おそらく閉鎖されます。 [faq]と[ask]をお読みください。 –

+2

そのダンプは空白ではなく、改行文字を含んでいます。これは偽/空ではないとみなされます。 – TLP

答えて

7

コードuse warnings;はありますか?

あなたのコードでは、の文字列"\n"を渡していることが示されています。私の推測では、あなたのソースには、エラーメッセージで死ぬことを試みている行がありますが、エラーメッセージは初期化されていません。 some_test()パスしかしsome_other_test()はダイが唯一の新しい行を含むエラーを報告します失敗した場合には

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

のようなものである可能性があります。また、警告が有効になっている場合は、警告が表示されます。

別の可能性は、タイプミスです。 use strict;を入力しないと、エラー変数が正しくない可能性があります。 use strict;なし

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

これは欠場する簡単な間違いすることができます。

+0

内部APIをチェックして、同じエラーが見つかりました....ありがとうございました! –

+0

'eval'が' $ @ 'を壊すのは実際に可能です。 (5.14または5.16で修正されています)あなたがそれを知っていて、別のエラーである可能性が高いと思っていて、あなたが正しいとしたら、うわー! – ikegami

+0

@ikegami、その症状は '$ @ =" \ n "' Perlのクボウバグは、通常は '$ @ = undef'を残します。あなたの興味がある論理が、おそらく効果的に '' die "と呼ばれる$ @誰かの" \ n "という行に沿っているなら、おそらくそれを書かなかったでしょう。だから典型的な間違いはそれを作り出すことでしょうか?おそらく、文字列に補間された初期化されていない値です。それは何故警告になりませんか? –

関連する問題