http://www.perlmonks.org?node_id=309487

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Dear monks, I have written a script that operates on long sequences (e.g. 3 million characters).

The program is far slower than expected and I need it to be a lot quicker. I used the Benchmark module to determine which part of the code was being soo slow and it turned out to be this bit below;

Does anyone know of a way to speed this bit of code up? It is just calculating frequencies of different base pairs in a sequence. Cheers!

if (($genome[$i] eq 'a') && ($genome[$i+1] eq 'a')) { ++$tt; } elsif (($genome[$i] eq 'a') && ($genome[$i+1] eq 'g')) { ++$ +ag; } elsif (($genome[$i] eq 'a') && ($genome[$i+1] eq 'c')) { ++$ +ac; } elsif (($genome[$i] eq 'a') && ($genome[$i+1] eq 't')) { ++$ +at; } elsif (($genome[$i] eq 't') && ($genome[$i+1] eq 'a')) { ++$ +ta; } elsif (($genome[$i] eq 't') && ($genome[$i+1] eq 'g')) { ++$ +tg; } elsif (($genome[$i] eq 't') && ($genome[$i+1] eq 'c')) { ++$ +ga; } elsif (($genome[$i] eq 't') && ($genome[$i+1] eq 't')) { ++$ +tt; } elsif (($genome[$i] eq 'c') && ($genome[$i+1] eq 'a')) { ++$ +tg; } elsif (($genome[$i] eq 'c') && ($genome[$i+1] eq 'g')) { ++$ +cg; } elsif (($genome[$i] eq 'c') && ($genome[$i+1] eq 'c')) { ++$ +cc; } elsif (($genome[$i] eq 'c') && ($genome[$i+1] eq 't')) { ++$ +ag; } elsif (($genome[$i] eq 'g') && ($genome[$i+1] eq 'a')) { ++$ +ga; } elsif (($genome[$i] eq 'g') && ($genome[$i+1] eq 'g')) { ++$ +cc; } elsif (($genome[$i] eq 'g') && ($genome[$i+1] eq 'c')) { ++$ +gc; } elsif (($genome[$i] eq 'g') && ($genome[$i+1] eq 't')) { ++$ +ac; }