[Bioperl-l] possible filehandle out of scope bug between
Bio::AlignIO and Bio::Tools::Run::Hmmer
Scott Markel
smarkel at scitegic.com
Mon Apr 18 15:17:10 EDT 2005
Note: The context for this message assumes the code change
to Bio::Tools::Run::Hmmer that I just sent to the mailing
list.
I'm running BioPerl-1.4 on both Windows XP (Perl 5.8.0) and
cygwin (Perl 5.8.5). I get the same behavior when I use
BioPerl-1.5.
When I run the following code, I get the error message
Can't call method "consensus_string" on an undefined value
at runHmmAlign.pl line 14.
If I change $factory to $::factory, so that it doesn't go out
of scope when the subroutine is done, then everything is fine.
My Perl debugging skills aren't what they should be, so I'm
not sure how to verify the following, but it looks like the
destructor for Bio::Tools::Run::Hmmer clobbers the filehandle
in Bio::AlignIO. Similar code involving Bio::Tools::Run::Hmmer
and Bio::SearchIO (for hmmsearch) does not have this problem.
I checked the bug list, but didn't find anything for AlignIO
and filehandle.
Scott
==============================
use strict;
use warnings;
use Bio::Tools::Run::Hmmer;
my $hmmFile = shift;
my $sequenceFile = shift;
my $in = Bio::SeqIO->new(-file => $sequenceFile , -format => "fasta");
my $sequence = $in->next_seq();
my $hmmResults = runHmmAlign($hmmFile, $sequence);
my $alignment = $hmmResults->next_aln();
my $consensusString = $alignment->consensus_string();
print("$consensusString\n");
sub runHmmAlign
{
my ($hmmFile, $sequence) = @_;
my $hmmResults;
eval
{
my $factory = Bio::Tools::Run::Hmmer->new("program" => "hmmalign",
"hmm" => $hmmFile);
$hmmResults = $factory->run($sequence);
};
if ($@)
{
die("hmmalign failed: $@\n");
}
return $hmmResults;
}
==============================
--
Scott Markel, Ph.D.
Principal Bioinformatics Architect email: smarkel at scitegic.com
SciTegic Inc. mobile: +1 858 205 3653
9665 Chesapeake Drive, Suite 401 voice: +1 858 279 8800, ext. 253
San Diego, CA 92123 fax: +1 858 279 8804
USA web: http://www.scitegic.com
More information about the Bioperl-l
mailing list