2010-03-10 7 views
0

Je continue à travailler sur un bioinformatics book obsolète et j'essaie d'utiliser le module XML :: Smart.XML :: Smart Parser en Perl

Je soupçonne que les méthodes du module ont changé au cours des 6 années et je suis inexpérimenté avec perl pour dépanner de cpan source. Le code commenté prouve les fonctions de la requête ncbi.gov, j'ai des problèmes avec la nouvelle méthode - ce n'est pas l'analyse du XML. Qu'est-ce que je fais mal? Merci!

Mise à jour Plus précisément, je suis en cours d'exécution des ennuis avec l'analyse syntaxique et l'affichage du tableau Id: my @Id = $results->{eSearchResult}{IdList}{Id}{'@'}; Je suis en cours d'exécution sur le terminal ce OSX et je ne vois pas Ids quand je lance ce script. Je vois le bon comte. Merci!

#!/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"; 
+1

Pourquoi utilisez-vous un livre pas à jour? –

Répondre

2

La première chose que vous avez fait de mal est de commenter use strict, la seconde est d'utiliser -w au lieu de use warnings.

Avec strict activée, perl fera rapport:

bareword "XML :: Parser" non autorisés alors que "les sous-marins stricte" en usage à tmp: test.pl ligne 19.

Cela nous permet de déterminer où le problème se produit.

Le examples in the documentation say que le deuxième argument (l'analyseur à utiliser) doit être cité, et vous ne l'avez pas cité.

donc nous changeons à:

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

... et il fonctionne.

(Soit dit en passant, la langue est appelée "Perl", not "perl" or "PERL")

+0

Je cours ceci à partir du terminal OSX. Je ne vois pas un tableau (ou quoi que ce soit d'ailleurs à partir de la commande print "$ all_Id \ n";) Cela ne devrait-il pas renvoyer 10 Ids? Suivez le lien: http: //eutils.ncbi.nlm.nih .gov/entrez/eutils/esearch.fcgi? db = Pubmed & retmax = 10 & term = Cancer + Prostate –

-1

changement:

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

à:

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

+1

Cela devrait être édité dans la question, pas ajouté comme une réponse – Ether

+0

vous les gens perl sont en hausse.C'était une erreur évidente que j'ai faite et c'est la solution qui a résolu le problème: une réponse, je reviens maintenant à mon livre de rubis. –