[Bioperl-l] error message: can't call method "next_hit" on and undefined value
Robert Buels
rmb32 at cornell.edu
Tue Jun 16 15:46:40 EDT 2009
Mgavi Brathwaite wrote:
> Hello,
> My method produces an error message stating that it can't call a "next_hit"
> method on an undefined value.
Your proximate problem seems to be that you are prepending a '>' to the
filename in your invocation of Bio::SearchIO::new, which I think might
cause it to write to the file instead of reading from it. But also, you
probably want to use next_result and next_hit in while loops, since they
return undef when there are no more hits or hsps to parse. This is what
is causing your "can't call next_hit on undefined value" error.
next_result() returns undef when there are no results to parse.
by while loops, I mean something like:
while( my $result = $in->next_result ) {
while( my $hit = $result->next_hit ) {
# insert the rest of your operations here
}
}
Hope this helps.
Rob
> Hello,
> My method produces an error message stating that it can't call a "next_hit"
> method on an undefined value.
>
> sub hu_bl2seq_parser{
> my ($maid, $maid_dir) = @_;
> # Get the report
> my $in = new Bio::SearchIO(-format => 'blast',
> -file => ">".$maid_dir."\\".$maid."aln_hu.aln",
> -report_type => 'blastn');
> #open(my $out, ">$maid_dir/".$maid."aln_hu_parsed.out");
> #my $out = Bio::AlignIO->newFh(-format => 'clustalw' );
> my $result=$in->next_result;
> my($hu_aln,$hu_mismatches);
> # Get info about the first hit
> my $hit = $result->next_hit;
> my $name = $hit->name;
> # get info about the first hsp of the first hit
> my $hsp = $hit->next_hsp;
> # get the alignment object
> my $aln = $hsp->get_aln;
> #my $percent_id = $hsp->percent_identity;
> #my $aln_length = $hsp->length('total');
> my @mismatches = $hsp->seq_inds('query','nomatch');
> my $aln_str="";
> # access the alignment string
> my $strIO=IO::String->new($aln_str);
> # write the string alignio in clustalw format
> my $alnio = Bio::AlignIO->new(-format => 'clustalw', -fh=>$strIO);
> # now the actual alignment string is accessable for printing or in
> this case moving to a db table
> $alnio->write_aln($aln);
> $hu_aln=$aln_str;
> $hu_mismatches = scalar @mismatches;
> return($hu_aln, $hu_mismatches);
> }
>
> The problem is at "my $hit = $result->next_hit;"
> Any help will be appreciated.
> LomSpace
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>
More information about the Bioperl-l
mailing list