Что не так с этим утверждением Eval в Perl? - PullRequest
3 голосов
/ 12 января 2010

Что не так с этим eval утверждением в Perl? Я пытаюсь проверить правильность XML, перехватывая все исключения, возникающие при разборе файла, с помощью XML :: LibXML :

use XML::LibXML;
my $parser = XML::LibXML->new();   #creates a new libXML object.

    eval { 
    my $tree = $parser->parse_file($file) # parses the file contents into the new libXML object.
    };
    warn() if $@;

Ответы [ 2 ]

13 голосов
/ 12 января 2010

Легко, $ tree не сохраняется после eval {}.Скобки в perl, как правило, всегда предоставляют новую область видимости.И предупреждение требует от вас предоставить его аргументы $ @.

my $tree;
eval { 
    # parses the file contents into the new libXML object.
    $tree = $parser->parse_file($file)
};
warn $@ if $@;
5 голосов
/ 12 января 2010

Вы объявляете $ дерево внутри фигурных скобок, что означает, что оно не существует после закрывающей фигурной скобки. Попробуйте это:

use XML::LibXML;
my $parser = XML::LibXML->new();

my $tree;
eval { 
    $tree = $parser->parse_file($file) # parses the file contents into the new libXML object.
};
warn("Error encountered: $@") if $@;
...