sub mutate{ my @string = @{$_[0]}; for my $i (0.. $#string){ my $aref = $string[$i]; #print "\n"; if (rand() < $mutation_rate){ my $position1 = int(rand($#{$aref})); my $position2 = int(rand($#{$aref})); if ($position1 ne $position2){ my $temp = $string[$i][$position1]; $string[$i][$position1] = $string[$i][$position2]; $string[$i][$position2] = $temp; } } } return \@string; } #### sub mutate{ my @string = @{ $_[ 0 ] }; for my $i ( 0 .. $#string ){ my $aref = $string[ $i ]; #print "\n"; if ( rand() < $mutation_rate ){ my $position1 = int rand @$aref; my $position2 = int rand @$aref; if ( $position1 != $position2 ){ @{ $string[ $i ] }[ $position1, $position2 ] = @{ $string[ $i ] }[ $position2, $position1 ]; } } } return \@string; }