If a nucleotide triplet with an unknown nucleotide appears (ex. ANC instead of ATC), I'd want to either skip those, or mark them with a letter like 'X'.
In the first two solutions, you can use exists, e.g.:
if ( exists $genetic_code{$codon} ) {
$amino_acid .= $genetic_code{$codon};
}
else {
$amino_acid .= $codon;
# - OR -
$amino_acid .= 'X';
# or something else...
}
Update: Or, written more tersely, either $amino_acid .= exists $genetic_code{$codon} ? $genetic_code{$codon} : 'X'; or $amino_acid .= $genetic_code{$codon} // 'X'; (the former uses the Conditional Operator, and the latter uses Logical Defined Or instead of exists, assuming you don't have any undef values in your hash).