I get those warnings (with use warnings in effect). The
problem comes from this loop.
my @lnPAM1=();
LINE: for (my $i=0; $i<20; $i++){
for (my $j=0; $j<20; $j++){
if ($matrix[$i][$j] > 0){
$lnPAM1[$i][$j] = log $matrix[$i][$j];
}else{ next LINE;
}
}
}
When a matrix element equals zero, that value of @lnPAM1 remains
undefined, and that undefined value is
being used at line 64.
$lnPAM1[$i][$j]= ($lnPAM1[$i][$j]) /($mutrate*100);
For instance, $lnPAM1[0][17] and $lnPAM1[0][18] are undef.
To avoid the warnings, you'll need to either assign some value to
all of them or exclude matrix
elements which are undef from executing line 64.