XML :: inteligente Analizador en Perl
-
19-09-2019 - |
Pregunta
Estoy continuar trabajando fuera de una obsoleta bioinformática libro y estoy tratando de usar el XML :: módulo inteligente.
Sospecho métodos del módulo han cambiado con el transcurso de 6 años y estoy sin experiencia con el Perl para solucionar problemas de fuente de CPAN . El código comentado demuestra las funciones de consulta ncbi.gov, tengo problemas con el método 'nuevo' - no es analizar el archivo XML. ¿Qué estoy haciendo mal? ¡Gracias!
Actualizar Específicamente estoy corriendo en problemas con el análisis y la visualización de la matriz Id: my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};
estoy corriendo esta en el terminal OSX y no veo ningún código cuando corro este script. Estoy viendo el conde adecuada. Gracias!
#!/usr/local/bin/perl
# use lib "/Users/fogonthedowns/myperllib";
# use LWP::Simple;
use XML::Smart;
use strict;
#Set base URL for all eutils
my $utils = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils";
my $db = "Pubmed";
my $query ="Cancer+Prostate";
my $retmax = 10;
my $esearch = "$utils/esearch.fcgi?" .
"db=$db&retmax=$retmax&term=";
# my $esearch_result = get($esearch.$query);
# print "ESEARCH RESULT: $esearch_result\n";
# print "Using Query: \n$esearch$query\n";
# print "hello world\n";
my $results = XML::Smart->new($esearch.$query,"XML::Parser");
my $count = $results->{eSearchResult}{Count};
my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};
my $all_Id = join("\n", @Id);
print "Count = $count\n";
print "$all_Id\n";
Solución
Lo primero que ha hecho mal es para comentar use strict
, la segunda es utilizar -w
en lugar de use warnings
.
Con estricto activada, Perl informará:
Bareword "XML :: Parser" no permitido, mientras que "estricta subs" en uso en tmp:. Test.pl línea 19
Esto nos deja remontar donde está ocurriendo el problema.
El en la documentación dicen que el segundo argumento (que el analizador uso) debe ser citado, y no se ha citado a él.
Así que cambiamos a:
my $results = XML::Smart->new($esearch.$query,"XML::Parser");
... y funciona.
(Por cierto, el lenguaje se llama "Perl", no "perl" o "Perl" )
Otros consejos
Cambio:
my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};
a:
my @Id = $results->{eSearchResult}{IdList}{Id}('@');