in reply to How can I get correct result in counting 3-letter words?
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"); } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: How can I get correct result in counting 3-letter words?
by NetWallah (Canon) on Apr 22, 2012 at 23:14 UTC | |
|
Re^2: How can I get correct result in counting 3-letter words?
by BillKSmith (Monsignor) on Apr 22, 2012 at 23:53 UTC | |
|
Re^2: How can I get correct result in counting 3-letter words?
by aaron_baugher (Curate) on Apr 23, 2012 at 01:18 UTC | |
by ikegami (Patriarch) on Apr 23, 2012 at 01:45 UTC | |
by aaron_baugher (Curate) on Apr 23, 2012 at 02:25 UTC |