in reply to Re: Use of Uninitialized Value- Multiple Errors
in thread Use of Uninitialized Value- Multiple Errors

Thanks! How did you know that  $breakpoint{$chr}{$i} was undefined instead of  $fix[$k] ?

Replies are listed 'Best First'.
Re^3: Use of Uninitialized Value- Multiple Errors
by holli (Abbot) on May 28, 2019 at 18:24 UTC
    In your code they were both undefined and I understood this by reading the code and understanding the error message. Which says clearly there is an undefined value used in a numeric comparison aka ==. There is only one thing that gets compared numerically in that line
    $fix[$k]=1 if ($breakpoint{$chr}{$i}==1);
    Now if that condition is false then $fix[$k] will also be undefined because it is never set to something else elsewhere. But later on you use it in another numeric comparison
    $S[$k]=0 if ($S[$k]<0 || $fix[$k]==1);
    And that triggers the second warning. My fix works so that I check for definedness of the value in the hash and making sure all values in the @fix are defined (either 0 or 1 instead of undefined and 1).


    holli

    You can lead your users to water, but alas, you cannot drown them.
Re^3: Use of Uninitialized Value- Multiple Errors
by poj (Abbot) on May 28, 2019 at 19:00 UTC

    If @fix is only used in that loop consider removing it.

    for my $i (0 .. $chrsize{$chr}) { $index{$k} = "$chr\t$i"; $score[$k] = $piRNA{$chr}{$i} - $penalty; if ( defined $breakpoint{$chr}{$i} && $breakpoint{$chr}{$i}==1 ){ $S[$k] = 0; } else { if ($i == 0) { $S[$k] = $score[$k]; } else { $S[$k] = $S[$k-1]+$score[$k]; } $S[$k] = 0 if $S[$k]<0; } $k++; }
    poj
Re^3: Use of Uninitialized Value- Multiple Errors
by BillKSmith (Monsignor) on May 28, 2019 at 18:05 UTC
    $fix is undefined because line 132 fails due to undefined element in %breakpoint.
    Bill