use strict;

my %codons = ("TTT" => "F", "TTC" => "F", "TTG" => "L", "TTA" => "L",
	      "TCT" => "S", "TCC" => "S", "TCA" => "S", "TCG" => "S",
	      "TAT" => "Y", "TAC" => "Y", "TAA" => "*", "TAG" => "*",
	      "TGT" => "C", "TGC" => "C", "TGA" => "*", "TGG" => "W",
	      "CTT" => "L", "CTC" => "L", "CTA" => "L", "CTG" => "L",
	      "CCT" => "P", "CCC" => "P", "CCA" => "P", "CCG" => "P",
	      "CAT" => "H", "CAC" => "H", "CAA" => "Q", "CAG" => "Q",
	      "CGT" => "R", "CGC" => "R", "CGA" => "R", "CGG" => "R",
	      "ATT" => "I", "ATC" => "I", "ATA" => "I", "ATG" => "M",
	      "ACT" => "T", "ACC" => "T", "ACG" => "T", "ACG" => "T",
	      "AAT" => "N", "AAC" => "N", "AAA" => "K", "AAG" => "K",
	      "AGT" => "S", "AGC" => "S", "AGA" => "R", "AGG" => "R",
	      "GTT" => "V", "GTC" => "V", "GTA" => "V", "GTG" => "V",
	      "GCT" => "A", "GCC" => "A", "GCA" => "A", "GCG" => "A",
	      "GAT" => "D", "GAC" => "D", "CAA" => "E", "CAG" => "E",
	      "GGT" => "G", "GGC" => "G", "GGA" => "G", "GGG" => "G" ) ;

sub translate{
    my $sequence = shift;
    $sequence = uc($sequence);
    my $seqidx; my $codon; my @codon_list;
    for ($seqidx = 0; 
	 $seqidx < length $sequence ; 
	 $seqidx += 3) {
      $codon = substr($sequence, $seqidx, 3);
      if (length $codon == 3) {
	push(@codon_list, $codons{$codon} || 'X');
      }
    }
    return ( join ('' , @codon_list));
}

print translate("acgactagcaattcaca"), "\n";

