3

evalPerlのこのステートメントの何が問題になっていますか?XML :: LibXML: を使用したファイルの解析からスローされた例外をキャッチすることにより、XMLが有効であることを確認しようとしています。

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

2 に答える 2

13

簡単です。$treeは。を超えて存続しませんeval {}。原則として、perlの中括弧は常に新しいスコープを提供します。また、warnでは、引数$@を指定する必要があります。

my $tree;
eval { 
    # parses the file contents into the new libXML object.
    $tree = $parser->parse_file($file)
};
warn $@ if $@;
于 2010-01-12T04:22:15.063 に答える
5

中括弧内に$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 $@;
于 2010-01-12T04:26:48.110 に答える