Exception handling perl eval抛出空白异常

Exception handling perl eval抛出空白异常,exception-handling,perl,Exception Handling,Perl,我正在更新数据库中的一些记录。所有的处理都是在eval块中完成的。 问题是,即使成功更新了记录,我仍然看到出现异常 为了调试异常,我尝试使用数据转储程序打印它,但异常为空 有谁能帮我确定这个错误是什么,为什么每次都抛出它 环境详细信息(Perl 5.8和Unix SUSE) 从数据转储程序转储: $VAR1 = ' '; 我正在使用各种内部API来更新这些记录。。因此,我修改了代码,使其看起来类似: sub main{ eval{ DB->u

我正在更新数据库中的一些记录。所有的处理都是在eval块中完成的。 问题是,即使成功更新了记录,我仍然看到出现异常

为了调试异常,我尝试使用数据转储程序打印它,但异常为空

有谁能帮我确定这个错误是什么,为什么每次都抛出它

环境详细信息(Perl 5.8和Unix SUSE)

从数据转储程序转储:

$VAR1 = '
';
我正在使用各种内部API来更新这些记录。。因此,我修改了代码,使其看起来类似:

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

       package DB;
       sub updateRecord{
             my ($self , $value) = @_;
             my $query = "update set column_value = $value ..<update query> ";
            API->processQuery($query );
        }
sub-main{
评估{
DB->updateRecord($value)
};
如果($@){
邮件->发送邮件(\uuuuuuuuuuuu,美元@):
}
}
包DB;
子更新记录{
我的($self,$value)=@;
my$query=“更新集列值=$value..”;
API->processQuery($query);
}

您的代码
是否使用警告

您描述的症状表明您正在代码中传递字符串
“\n”
。我的猜测是,在你的源代码中,有一行代码正试图终止,但错误消息没有初始化。可能是这样的

my $error;
if (some_test()) {
    $error = 'Some String';
}
if (some_other_test()) {
    die "$error\n";
}
如果
some_test()
通过,但
some_other_test()
失败,则模具将报告仅包含新行的错误。如果启用了警告,它还会发出警告

另一种可能是打字错误。如果你不
使用strict错误变量可能不正确

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

使用严格这很容易出错。

您能在这里发布代码,以便我们能够了解情况吗?如果没有代码,您的问题将被否决,并可能被关闭。请阅读和。该转储不是空的,它包含一个换行符,不被认为是假/空的。您的SQL查询是真的没有引号,还是仅仅是一个输入错误?它只是一个输入错误。实际上,
eval
可能会对
$
进行重击。(在5.14或5.16中修复。)如果你知道这一点,并且认为这更可能是一个不同的错误,那么你是对的,哇@ikegami,症状是
$@=“\n”
Perl中的cobber bug通常会离开
$@=undef
。如果您感兴趣,我的逻辑是在$@中获得“\n”,可能有人实际上称之为
die”\n,但可能不是他们写的。那么,一个典型的错误是什么呢?它可能是插入字符串的未初始化值。这导致了,为什么没有警告?