什么';Perl中的eval语句有什么问题?

什么';Perl中的eval语句有什么问题?,perl,eval,libxml2,Perl,Eval,Libxml2,Perl中的eval语句有什么问题?我试图通过捕获解析文件时抛出的任何异常来检查XML是否有效: 简单,$tree不会持续超过eval{}。perl中的大括号通常提供一个新的作用域。和warn要求您提供其参数$@ my $tree; eval { # parses the file contents into the new libXML object. $tree = $parser->parse_file($file) }; warn $@ if $@; 您正在大括

Perl中的
eval
语句有什么问题?我试图通过捕获解析文件时抛出的任何异常来检查XML是否有效:


简单,$tree不会持续超过
eval{}
。perl中的大括号通常提供一个新的作用域。和warn要求您提供其参数$@

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

您正在大括号内声明一个$tree,这意味着它不存在于右大括号之外。试试这个:

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 $@;

不需要单独声明$tree。eval的结果是最后一个计算结果:my$tree=eval{…}。
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 $@;