2012-03-06 74 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