我继续使用过时的生物信息学书籍,并尝试使用XML::智能模块。
我怀疑该模块的方法在过去6年中发生了变化,而且我对perl缺乏从cpan源进行故障排除的经验。注释掉的代码证明了ncbi.gov查询函数,我在使用'new‘方法时遇到了麻烦--它没有解析XML。我做错了什么?谢谢!
具体而言,更新在解析和显示Id数组时遇到了问题:在OSX终端上运行,运行此脚本时没有看到任何Id。我看到的是正确的计数。谢谢!
#!/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";发布于 2010-03-10 16:00:19
您做错的第一件事是注释掉use strict,第二件是使用-w而不是use warnings。
有了严格的打开,perl将报告:
tmp:test.pl第19行中使用的“严格子”不允许使用Bareword“XML::解析器”。
这使我们能够追踪问题发生的地点。
应该引用第二个参数(要使用的解析器)的文档中的例子说,但您还没有引用它。
因此,我们改为:
my $results = XML::Smart->new($esearch.$query,"XML::Parser");…然后它就跑了。
(顺便说一句,这种语言被称为"Perl",而不是"perl“或"PERL”)
发布于 2010-03-10 16:39:53
改变:
my @Id = $results->{eSearchResult}{IdList}{Id}{'@'};
至:
my @Id = $results->{eSearchResult}{IdList}{Id}('@');
https://stackoverflow.com/questions/2418286
复制相似问题