Perl Eval выдает пустое исключение - PullRequest
0 голосов
/ 06 марта 2012

Я обновляю несколько записей в базе данных. И вся обработка выполняется в блоке 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 Ответ

7 голосов
/ 06 марта 2012

Ваш код 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; это может быть простой ошибкой, которую можно пропустить.

...