Unlike the "C" language, Perl strings are much different from arrays. In Perl, you usually have a choice of which to use. String solutions are usually easier and almost always execute faster. Here is a string-only solution to your problem.
my $DNA = "ATATCCCGATCAGG3TT!GCA\n";
print "The length of the sequence is:\n", length($DNA), "\n";
my $nucleotideDNA = $DNA;
#my $count = $nucleotideDNA =~ tr/ATCG]//c; # Remove and count invali
my $count = $nucleotideDNA =~ tr/ATCG//cd; # Remove and count invalid
my $locations; # Find location of invalids in original string
$locations .= "$-, " while ( $DNA =~ /[^ATCG]/g );
print "There are $count non-valid nucleotides at locations:\n$location
The length of the sequence is:
There are 2 non-valid nucleotides at locations:
UPDATE: Modified one line of code to correct errors identified by AnomalousMonk (below) Original remains as comment.