You did not constrain where any of the triplets could match. You could replace
while ($seq =~ /GCT/ig) { $GCT++; }
with
while ($seq =~ /\G(?:...)*?GCT/sig) { $GCT++; }
or with
while ($seq =~ /\G(...)/sg) { $GCT++ if uc($1) eq 'GCT'; }
but lets take one further and use
while ($seq =~ /\G(...)/sg) { $counts{uc($1)}++; }
That reduces your program to
my %counts; ++counts{uc($_)} for $seq =~ /.../sg; for my $l1 (qw( T C A G )) { for my $l2 (qw( T C A G )) { for my $l3 (qw( T C A G )) { my $k = "$l1$l2$l3"; my $v = $counts{$k} || 0; print("$k=$v;"); } print("\n"); } }
In reply to Re: How can I get correct result in counting 3-letter words?
by ikegami
in thread How can I get correct result in counting 3-letter words?
by supriyoch_2008
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |