XML :: inteligente analisador em Perl
-
19-09-2019 - |
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";
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}('@');