[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