my $count = $nucleotideDNA =~ tr/ATCG]//c; # Remove and count invalids
Sofie: Note that while this tr/// (see Quote-Like Operators in perlop) expression counts the number of characters that are not ATCG, it does not remove anything; the string is not changed (update: nor is there any need for change):
c:\@Work\Perl\monks>perl -wMstrict -le
"my $DNA = 'ATATCCCGATCAGG3TT!GCA';
;;
my $nucleotideDNA = $DNA;
my $count = $nucleotideDNA =~ tr/ATCG//c;
;;
print $DNA;
print $nucleotideDNA;
;;
print 'sequences are equal' if $DNA eq $nucleotideDNA;
"
ATATCCCGATCAGG3TT!GCA
ATATCCCGATCAGG3TT!GCA
sequences are equal
Also note that there is a
] character in the
set | tr/// search set that should not be there.
However, I agree with the main point that BillKSmith is making: string operations with regexes or with operators like substr and index will tend to be significantly faster (update: and to consume significantly less memory) than equivalent array operations.
Give a man a fish: <%-{-{-{-<