[Bioperl-l] use threads to get seq file error.

Zhang_tao Zhang_tao at uestc.edu.cn
Mon Mar 1 00:02:12 EST 2010


Hi all,

When I use threads to get Genbank format file, show some error. It is
shown as:

"Can't call method "get_taxon" on unblessed reference at
/opt/local/lib/perl5/site_perl/5.8.9/Bio/Taxon.pm line 671."


#!/usr/bin/perl -w
use strict;
use Bio::SeqIO;
use Bio::Seq;
use Bio::DB::GenBank;
use threads;


my @id =
("AK287649","AF031249","EZ238383","BLYDHN5","AY895908","EF409493","AY895886","AF181455","AY895930","EF409498");


my $seq_out = Bio::SeqIO->new(-format => "genbank",
-file => ">dhn_all.gb");
my @seq;

my $number = @id;

my $max_threads = 6;

for (my $thread_number=0;$thread_number<$number;){
my %threads_seq_hash;

if ($number - $thread_number > $max_threads){
for (my $thread=0;$thread<$max_threads;){
$threads_seq_hash{$thread} = threads->new(sub {
my $gb = Bio::DB::GenBank->new;
my $seq = $gb->get_Seq_by_acc($id[$thread_number]);
});
$thread_number++;
$thread++;

}
}else{
my $else_number = $number % $max_threads;
for (my $thread=0;$thread<$else_number;){
$threads_seq_hash{$thread} = threads->new(sub {
my $gb = Bio::DB::GenBank->new;
my $seq = $gb->get_Seq_by_acc($id[$thread_number]);
});
$thread_number++;
$thread++;

}


}

foreach my $thread (sort keys %threads_seq_hash){
my ($seq) = $threads_seq_hash{$thread}->join;
push (@seq,$seq);
}
}

foreach (@seq){
$seq_out->write_seq($_);
}




How can I fix this error?
Thanks.


Zhang Tao






More information about the Bioperl-l mailing list