2010-01-12 8 views
3

Quel est le problème avec cette instruction eval en Perl? Je suis en train de vérifier que le XML est valide en attrapant des exceptions lancées de l'analyse syntaxique du fichier avec XML::LibXML:Quel est le problème avec cette instruction eval dans Perl?

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 [email protected]; 

Répondre

13

facile, arbre $ ne persiste pas passé le eval {}. Les accolades en Perl en règle générale fournissent toujours une nouvelle portée. Et avertit vous oblige à fournir ses arguments $ @.

my $tree; 
eval { 
    # parses the file contents into the new libXML object. 
    $tree = $parser->parse_file($file) 
}; 
warn [email protected] if [email protected]; 
+4

Il n'est pas nécessaire de déclarer $ tree séparément. Le résultat de l'évaluation est le dernier résultat évalué: my $ tree = eval {...}. –

5

Vous déclarez un $ tree à l'intérieur des accolades, ce qui signifie qu'il n'existe pas après l'accolade fermante. Essayez ceci:

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: [email protected]") if [email protected]; 
Questions connexes