XML :: Smart-Parser in Perl
-
19-09-2019 - |
Frage
Ich bin weiterhin aus einer veralteten Ich laufe dies auf OSX Terminal und ich sehe keine Ids, wenn ich dieses Skript ausführen. Ich sehe den richtigen Graf. Dank!
#!/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";
Lösung
Das erste, was Sie falsch gemacht haben ist use strict
Kommentar aus, die zweite -w
zu verwenden, anstatt use warnings
.
Mit strengen eingeschaltet wird, wird Perl-Bericht:
Bareword "XML :: Parser" nicht zulässig, während "strict subs" im Einsatz bei tmp. Test.pl Zeile 19
Auf diese Weise können wir verfolgen, wo das Problem auftritt.
Die Beispiele in der Dokumentation sagen dass das zweite Argument (der Parser Verwendung) angegeben werden soll, und Sie haben es nicht zitiert.
So wir ändern:
my $results = XML::Smart->new($esearch.$query,"XML::Parser");
... und es läuft.
(Übrigens wird die Sprache genannt "Perl", nicht "Perl" oder "PERL" )
Andere Tipps
Änderung:
my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};
zu:
my @Id = $results->{eSearchResult}{IdList}{Id}('@');