As a side note to what has already been said, I think that using a dispatch table might be a better choice than your very long if/elsif/elsif... procedure. The keys could be the two first letters of your codon and the values either directly the relevant aminoacid or a coderef returning the right aminoacid, depending (when needed) on the third letter of the codon.
I have never been working on this type of problems, so I never tried this type of solution on this type of problems, but I have the feeling that it might be more efficient. I also may be completely wrong. Just my 2 cents.