This is not an answer but I am puzzled by your use of @indices. It contains the integers from 0 to 80 and is used in only one function
my @indices = (
76, 46, 21, 15, 33, 20, 69, 65, 40, 11, 79, 22, 70, 43, 32, 30, 57
+, 19,
39, 37, 62, 3, 4, 44, 51, 58, 25, 72, 64, 59, 48, 80, 42, 38, 61
+, 75,
49, 1, 18, 71, 41, 2, 67, 13, 45, 60, 9, 7, 28, 6, 8, 54, 50
+, 73,
56, 53, 77, 27, 16, 29, 52, 10, 24, 5, 26, 36, 23, 34, 31, 47, 14
+, 35,
12, 55, 17, 0, 68, 74, 66, 78, 63
); #number of the columns.
...
sub genotype {
my @seq;
my @gene;
my @string;
push @gene, shuffle @indices;
...
}
this can be rewritten as
my $max_index = 80;
...
sub genotype {
my @seq;
my @gene = shuffle 0 .. $max_index;
my @string;
...
}
which makes your intent clearer and avoids the possiblity of missing an integer.