Do you later use the value as a string or as a number? If you use it as a number, I believe you could save quite a bit of memory by forcing a conversion before storing the data. The way you do it, you end up with a scalar containing both the string and (as soon as you use the number for the first time) the number.
...
$DATA{$1}{$2}[$set][$replicate] = 0 + "$3.$4";
} elsif ((/^chr(\S+)\s+(\d+)\s+\d+\s+(\d)\s+(\d+)/) && ($1 ~~
+ @CHROMOSOMES) && ($
+4 >= $MINIMUM_COVERAGE)) {
$DATA{$1}{$2}[$set][$replicate] = 0 + $3;
...
Jenda
Enoch was right!
Enjoy the last years of Rome.