$ cat 1000161.pl #!/usr/bin/perl -w use strict; my $s1 = "AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTT"; print "$s1\n"; my $idx = -1; my $start = 'ATG'; while (my $prefix = substr($s1, ++$idx, 3)) { last if length $prefix < 3; # check for start indicator next unless $prefix eq 'ATG'; my $peptide = proteinseq(substr($s1, $idx)); print "\nPEPTIDE <$peptide>\n"; } sub proteinseq { my ($dna) = @_; my $dna_seq = ''; for (my $i=0; $i < length($dna)-2; $i +=3) { my $codon = substr($dna, $i, 3); print "$codon\t"; $dna_seq .= $codon; # moved up a line # We're done if we found the ending codon return $dna_seq if ($codon =~ /TA[GA]|TGA/); } # We hit end of our dna fragment return $dna_seq . "***"; } $ perl 1000161.pl AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTT ATG TAG PEPTIDE ATG GGG ATG ACC CCG CGA CTT GGA TTA GAG TCT CTT PEPTIDE ATG ACC CCG CGA CTT GGA TTA GAG TCT CTT PEPTIDE