in reply to Re: Translation Substring Error (updated)
in thread Translation Substring Error

Good point. 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'.

I do like the regex solution though, it's quite elegant.

  • Comment on Re^2: Translation Substring Error (updated)

Replies are listed 'Best First'.
Re^3: Translation Substring Error
by haukex (Archbishop) on Nov 09, 2017 at 16:18 UTC
    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).

Re^3: Translation Substring Error
by haukex (Archbishop) on Nov 09, 2017 at 16:36 UTC
    I do like the regex solution though, it's quite elegant.

    You can combine my second and third suggestions (for nonexistent codes, this uses the defined-or solution I showed here, the exists solution would work as well):

    (my $amino_acid = $seq) =~ s{(...)} { $genetic_code{$1} // 'X' }esg; return $amino_acid;