سؤال

أنا مواصلة العمل من عفا عليها الزمن الكتاب الحيوي وأنا أحاول استخدام الوحدة النمطية XML :: Smart.

أظن أن طرق الوحدة قد تغيرت على مدار 6 سنوات، وأنا غير ناقصي مع بيرل لاستكشاف الأخطاء وإصلاحها مصدر CPAN. وبعد يثبت الرمز المعلق وظائف الاستعلام ncbi.gov، أواجه مشكلة في الطريقة الجديدة "الجديدة" - لا تحل محل XML. ما الخطأ الذي افعله؟ شكرًا!

تحديث على وجه التحديد، أعاني من مشكلة مع تحليل وعرض صفيف المعرف: my @Id = $results->{eSearchResult}{IdList}{Id}{'@'}; أقوم بتشغيل هذا على محطة OSX ولا أرى أي معرفات عند تشغيل هذا البرنامج النصي. أنا أرى العد المناسب. شكرًا!

#!/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";
هل كانت مفيدة؟

المحلول

أول شيء قمت به خطأ هو التعليق use strict, ، والثاني هو استخدام -w بدلاً من use warnings.

مع تحول صارم، سوف تقرير بيرل:

BareWord "XML :: Parser" غير مسموح به أثناء الاستخدام "STRAD SUBS" قيد الاستخدام في TMP: Test.Pl Line 19.

هذا يتيح لنا تتبع حيث تحدث المشكلة.

ال أمثلة في الوثائق يقول أن الحجة الثانية يجب أن يتم نقلها (المحلل المحلل)، ولم تقتبس عنه.

لذلك نحن نتغير إلى:

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

... ويعمل.

(بالمناسبة، وتسمى اللغة "بيرل"، وليس "بيرل" أو "بيرل")

نصائح أخرى

يتغيرون:

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

ل:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top