in reply to Count every 3rd base occurence

Your for loop is giving testing everything after @dna[4], not every third one, as the $i is only being incremented by one each time through the loop. i.e.
Wasn't sure how to explain but here are the values of $i and $i + 3 each time through the loop:
,etc...

I think what you are looking for is something more along these lines (as a for loop):

for ( my $i = 2; $i < @dna; $i = $i+3 ) { print "$dna[$i] at position $i\n"; if ( $dna[$i] eq 'C' or $dna[$i] eq 'G') { $counter++; } }
Here the $i is incremented by three every time through the loop, which I believe is what you wanted.

-enlil