in reply to Use of Uninitialized Value- Multiple Errors

I'm not sure where/what to print in order to debug
Well, the error message tells you quite clearly. $breakpoint{$chr}{$i} is undefined. That of course never sets $fix[$k] and causes the second warning later on. I think you want something like this:
$fix[$k] = 0; $fix[$k] = 1 if (defined $breakpoint{$chr}{$i} && $breakpoint{$chr}{$i +}==1);
Or shorter
$fix[$k] = defined $breakpoint{$chr}{$i} && $breakpoint{$chr}{$i}==1 ? + 1 : 0;


holli

You can lead your users to water, but alas, you cannot drown them.

Replies are listed 'Best First'.
Re^2: Use of Uninitialized Value- Multiple Errors
by hghosh (Acolyte) on May 28, 2019 at 17:49 UTC

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

      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.

      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
      $fix is undefined because line 132 fails due to undefined element in %breakpoint.
      Bill