I think you are attacking the problem from a wrong angle. You are walking through your DNA string step by step, instead of jumping through it in increments of three. Also you are using a C-style loop, which is very error prone, in your case for example the first element of @dna is at $dna[0]. I'd rewrite your code in the following way, jumping forward three slots with every round :
use strict; my $i = 2; my @dna = split //, 'CTCCGGATCTAT'; my $counter = 0; my $total = 0; while ($i < @dna) { if ($dna[$i] eq 'C') { $counter++; } elsif ($dna[$i] eq 'G') { $counter++; } $total++; $i += 3; } print "Found $counter G/C of $total elements at a 3-position\n";
perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web
In reply to Re: for loops
by Corion
in thread Count every 3rd base occurence
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |