Question

What's wrong with this eval statement in Perl? I'm trying to check that the XML is valid by catching any exceptions thrown from the parsing of the file with 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 $@;
Was it helpful?

Solution

Easy, $tree doesn't persist past the eval {}. Braces in perl as a general rule always provide a new scope. And warn requires you to provide its arguments $@.

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

OTHER TIPS

You're declaring a $tree inside the braces, which means it doesn't exist past the closing brace. Try this:

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 $@;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top