Pergunta

Eu estou continuando a trabalhar fora de um desatualizado bioinformática reservar e eu estou tentando usar o XML :: Módulo inteligente.

Eu suspeito métodos do módulo mudaram ao longo de 6 anos e eu sou inexperiente com perl para solucionar problemas de fonte cpan . O código comentado prova as funções de consulta ncbi.gov, eu estou tendo problemas com o método 'novo' - não é analisar o XML. O que estou fazendo errado? Obrigado!

Atualizar Especificamente eu estou correndo em problemas com analisar e exibir a matriz Id: my @Id = $results->{eSearchResult}{IdList}{Id}{'@'}; estou executando isso em OSX terminal e não vejo qualquer Ids quando eu executar este script. Eu estou vendo o conde adequada. Obrigado!

#!/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";
Foi útil?

Solução

A primeira coisa que você tem feito de errado é comentar use strict, a segunda é usar -w vez de use warnings.

Com estrita ligado, perl irá relatar:

bareword "XML :: Parser" não permitida enquanto "subs rigorosos" em uso no tmp:. Linha test.pl 19

Isso nos permite rastrear onde o problema está ocorrendo.

exemplos na documentação dizer que o segundo argumento (o analisador para utilização) deve ser citado, e você não ter citado lo.

Por isso, mudar para:

my $results = XML::Smart->new($esearch.$query,"XML::Parser");

... e ele é executado.

(Aliás, a linguagem é chamado "Perl", não "perl" ou "PERL" )

Outras dicas

mudança:

my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};

para:

my @Id = $results->{eSearchResult}{IdList}{Id}('@');

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top