use strict; use warnings; use feature qw(postderef); no warnings qw(experimental::postderef); use feature qw(say); my $dna = 'TTA'; my @proteinString; my $codon; for(my $i=0; $i < (length($dna) - 2) ; $i += 3) { $codon = substr($dna,$i,3); push @proteinString, $codon .= codonToAminoAcid($codon); } my $proteinString = \@proteinString; for my $element ( $proteinString->@* ) { say $element; } sub codonToAminoAcid { my($codon) = @_; if ( $codon =~ /GC./i) { return 'A' } elsif ( $codon =~ /TG[TC]/i) { return 'C' } elsif ( $codon =~ /GA[TC]/i) { return 'D' } elsif ( $codon =~ /GA[AG]/i) { return 'E' } elsif ( $codon =~ /TT[TC]/i) { return 'F' } elsif ( $codon =~ /GG./i) { return 'G' } elsif ( $codon =~ /CA[TC]/i) { return 'H' } elsif ( $codon =~ /AT[TCA]/i) { return 'I' } elsif ( $codon =~ /AA[AG]/i) { return 'K' } elsif ( $codon =~ /TT[AG]|CT./i) { return 'L' } elsif ( $codon =~ /ATG/i) { return 'M' } elsif ( $codon =~ /AA[TC]/i) { return 'N' } elsif ( $codon =~ /CC./i) { return 'P' } elsif ( $codon =~ /CA[AG]/i) { return 'Q' } elsif ( $codon =~ /CG.|AG[AG]/i) { return 'R' } elsif ( $codon =~ /TC.|AG[TC]/i) { return 'S' } elsif ( $codon =~ /AC./i) { return 'T' } elsif ( $codon =~ /GT./i) { return 'V' } elsif ( $codon =~ /TGG/i) { return 'W' } elsif ( $codon =~ /TA[TC]/i) { return 'Y' } elsif ( $codon =~ /TA[AG]|TGA/i) { return '_' } else { print "Unrecognized codon: \"$codon\"!\n"; exit; } }