perl eval投掷空白例外

ami*_*odi -1 perl exception-handling perl5

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

为了调试异常,我尝试使用Data Dumper打印它,但异常是空白的.

任何人都可以帮我确定这个错误是什么,为什么每次都抛出?

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

从数据转储器转储:

$VAR1 = '
';
Run Code Online (Sandbox Code Playgroud)

我正在使用各种内部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 );
        }
Run Code Online (Sandbox Code Playgroud)

Ven*_*tsu 7

你的代码use warnings;

您描述的症状表明您在代码中传递die了字符串"\n".我的猜测是,在您的源代码中,您有一条线路正在尝试使用错误消息而死,但您的错误消息未初始化.它可能是这样的

my $error;
if (some_test()) {
    $error = 'Some String';
}
if (some_other_test()) {
    die "$error\n";
}
Run Code Online (Sandbox Code Playgroud)

如果some_test()通过但未通过,some_other_test()则模具将报告仅包含新行的错误.如果启用了警告,它也会发出警告.

另一种可能性是拼写错误.如果不这样,use strict;则错误变量可能不正确.

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

没有use strict;这个可能是一个容易错过的错误.