in reply to [BioPerl] a warning I do not understand omits a sequence

I am not massively familiar with Bio::SimpleAlign, but a few things might help you work out what is going on: _seq is not a method, it is part of the structure of the object (a blessed hash), which from the looks of the source code, holds the sequence objects used in the multiple alignment.

So i would hazard a guess this code is doing first checking to see if a sequence of the given name already exists in the lookup hash ( ->{_seq} ) and then warns you conditional on the 'verbose' setting.

Usually 'verbose' setting control how much output a program gives, so this is probably a 'suppress warnings' construct. If the author used exists this would stop autovivification, and allow you to check for a sequence twice!

I couldn't find the verbose method, but the Bio::SimpleAlign inherits from :

use base qw(Bio::Root::Root Bio::Align::AlignI Bio::AnnotatableI Bio::FeatureHolderI);
So I suspect that one of these will hold the answer on that...

So your error is probably coming from overwriting a named code... You should be able to check beforehand, to make sure you don't do this.

Hope this helps ( and if i am wrong, it will be pointed out pretty quickly... ), and if you have more questions, we'll need to see more code and examples.

Just a something something...

Replies are listed 'Best First'.
Re^2: [BioPerl] a warning I do not understand omits a sequence
by AnomalousMonk (Archbishop) on Jan 11, 2010 at 21:17 UTC
    If the author used exists this would stop autovivification, and allow you to check for a sequence twice!

    Just a side note...

    In a boolean context such as that of the OPed code fragment, hash keys are not autovivified at their lowest level, but any 'intervening' keys are. This is also true when exists is used. So with or without  exists, as long as autovivification of the  '_seq' key does not cause any side effects, the code can check for the pre-existence of  $name as often as desired!
    Update: However, there is a (possibly very important) difference between the two tests: A key that really and truly does exist in a hash may yet have a value like undef, the empty string, the string  '0' or numeric 0 that will evaluate as boolean false.

    >perl -wMstrict -MData::Dumper -le "my $hr; die 'huh?' if $hr->{foo}{bar}; print Dumper $hr; undef $hr; print 'hash ref de-init'; die 'huh?' if exists $hr->{foo}{bar}; print Dumper $hr; " $VAR1 = { 'foo' => {} }; hash ref de-init $VAR1 = { 'foo' => {} };