perl eval投掷空白例外

时间:2012-03-06 19:05:13

标签: perl exception-handling perl5

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

要调试异常,我尝试使用Data Dumper打印它,但异常是空白的。

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

环境详细信息(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 );
        }

1 个答案:

答案 0 :(得分: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;,这可能是一个容易错过的错误。