[Bioperl-l] Use of uninitialized value in length at Bio/DB/SeqFeature/Store/DBI/mysql.pm line 1062

Dan Bolser dan.bolser at gmail.com
Sun Mar 27 13:55:02 EDT 2011


On 27 March 2011 18:28, Jason Stajich <jason at bioperl.org> wrote:
> Dan - not sure why you would need to do this as length on an undef should
> still return false (an undef).
>
> $ perl -e '$g=""; if( length($g)) { print "yes" } else { print "no"} print
> "\n"'
> no
> $ perl -e '$g=undef; if( length($g)) { print "yes" } else { print "no"}
> print "\n"'
> no

Doesn't the latter spew a warning? (The output before / after my 'bug
fix' is the same, I just don't see 100s of warnings about undefined
values).


> Also, having no 'source' is probably not proper GFF3.

I'm quite sure it is, but by GFF does have a source. I'm just calling
'features' with only a feature type and not a feature type and a
source (because I only care about source). My call is pretty similar
to the example here:

http://search.cpan.org/~cjfields/BioPerl-1.6.0/Bio/DB/SeqFeature/Store.pm#features

 @features = $db->features(-seqid=>'Chr1',-start=>5000,-end=>6000,-types=>'mRNA');


> BTW bugzilla is dead so the bug that you refer to is here
>  http://redmine.open-bio.org/issues/2899
> I've assigned the bug to Lincoln to help figure out what should be done with
> it.
>
> Thanks,
> jason

Cheers Jason,
Dan.


> Dan Bolser wrote:
>>
>> Hi all,
>>
>> I'm not sure why, but the code in Bio/DB/SeqFeature/Store/DBI/mysql.pm
>> uses:
>>     if (length $source_tag) {
>>
>> within the '_types_sql' function to test if $source_tag is defined
>> (and has a length). This obviously fails when $source_tag it isn't
>> defined, and I see the above error message from my script when I call
>> the 'features' function (as shown below).
>>
>> > From tests (thanks to rbuels in #bioperl) it seems the value of $type
>> is simply 'fwd link intensity', so:
>>       ($primary_tag,$source_tag) = split ':',$type,2;
>>
>> on line 1047 leaves $source_tag undefined.
>>
>> Here is my proposed fix:
>>
>> diff --git a/Bio/DB/SeqFeature/Store/DBI/mysql.pm b/Bio/DB/SeqFeature/Sto
>> index 00103c2..dfc70c0 100644
>> --- a/Bio/DB/SeqFeature/Store/DBI/mysql.pm
>> +++ b/Bio/DB/SeqFeature/Store/DBI/mysql.pm
>> @@ -1057,8 +1057,8 @@ sub _types_sql {
>>        ($primary_tag,$source_tag) = split ':',$type,2;
>>      }
>>
>> -    if (length $source_tag) {
>> -      if (length($primary_tag)) {
>> +    if (defined $source_tag&&  length $source_tag) {
>> +      if (defined $primary_tag&&  length($primary_tag)) {
>>          push @matches,"tl.tag=?";
>>          push @args,"$primary_tag:$source_tag";
>>        }
>>
>>
>> which seems to work. I'd write some tests, but an old bug that I can't
>> track down prevents me from running tests on this package
>> (http://bugzilla.open-bio.org/show_bug.cgi?id=2899).
>>
>> Cheers,
>> Dan.
>>
>>
>> Here are some snippets of code to give context:
>>
>> my $intensities = Bio::DB::SeqFeature::Store->
>>   new( -adaptor =>  'DBI::mysql',
>>        -dsn =>  'db:mysql.server.ac.uk',
>>        -user =>  'me',
>>        -pass =>  'secret',
>>        -verbose =>  $verbose,
>>      );
>>
>> my @fwd_intensity = $intensities->
>>     features( -seqid =>  'some-id', -type =>  'fwd link intensity',
>>               -start =>  10,
>>               -end   =>  200,
>>     );
>> _______________________________________________
>> Bioperl-l mailing list
>> Bioperl-l at lists.open-bio.org
>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>
> --
> Jason Stajich
> jason at bioperl.org
> http://bioperl.org/wiki
>
>



More information about the Bioperl-l mailing list