0

私は時代遅れのバイオインフォマティクスの本を読み続けており、XML::Smart モジュールを使用しようとしています。

モジュールのメソッドが 6 年の間に変更されたのではないかと思います。また、perl を使ってcpan sourceからトラブルシューティングを行う経験がありません。コメント アウトされたコードは、ncbi.gov クエリ関数を証明します。「新しい」メソッドに問題があります。XML を解析していません。私は何を間違っていますか?ありがとう!

更新具体的には、ID配列の解析と表示で問題が発生してmy @Id = $results->{eSearchResult}{IdList}{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";
4

2 に答える 2

2

最初に間違ったことは をコメントアウトすることであり、2 つ目はの代わりにuse strict使用することです。-wuse warnings

strict をオンにすると、perl は次のように報告します:

tmp:test.pl の 19 行目で "strict subs" が使用されている間、ベアワード "XML::Parser" は許可されません。

これにより、問題が発生している場所を追跡できます。

ドキュメントの例では、2 番目の引数 (使用するパーサー) を引用する必要があると書かれていますが、引用していません。

したがって、次のように変更します。

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

…そしてそれは実行されます。

(ちなみに、この言語は「perl」や「PERL」ではなく「Perl」と呼ばれます)

于 2010-03-10T16:00:19.663 に答える
-1

変化する:

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

に:

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

于 2010-03-10T16:39:53.953 に答える