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";
¿Fue útil?

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}('@');

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top