#!/usr/bin/perl 
use strict;

my %codonMap;
my @aminoacid; ## list of amino acids
my @trio; ## list of codons

while (my $in=<DATA>){
	chomp ($in);
	my @codons=split " ",$in;
	my $residue=shift @codons;
	push(@aminoacid, $residue);
	foreach my $nnn (@codons){
		$codonMap{$nnn}=$residue;
		push(@trio, $nnn);
	}
}

##'translate' translates mRNA strings to proteins
sub translate {
	my ($mrna)=@_;
	my $pro="";
	while($mrna=~s/(...)//){
		$pro=$pro.$codonMap{$1};
	}
	return $pro;
}

## 'transcribe' translates DNA strings to RNA
sub transcribe {
	my ($dna)=@_;
	$dna=~s/.*/\U$&/;
	my ($rna)=scalar reverse $dna;
	$rna=~tr/ACGT/UGCA/;
	return $rna;
}
## Read DNA line by line from the keyboard, translate it to RNA, and give the
## protein corresponding to each of the read frames. Use CTRL-D to stop.

print "Enter the DNA (upper case) on one line. Use a line feed to
start a new DNA sequence. Use CTRL-D to stop the program.\n";
while (my $dna=<STDIN>){
	chomp($dna);
	print "DNA: ",$dna,"\n";
	my $rna=transcribe($dna);
	print "RNA: ",$rna, "\n";
	my $protein=translate($rna);
	print "RF1: ",$protein,"\n";
	$rna=~s/.//;
	$protein=translate($rna);
	print "RF2: ",$protein,"\n";
	$rna=~s/.//;
	$protein=translate($rna);
	print "RF3: ",$protein,"\n\n";
}



__END__
Ala GCU GCC GCA GCG
Arg CGU CGC CGA CGG AGA AGG
Asn AAU AAC
Asp GAU GAC
Cys UGU UGC
Gln CAA CAG
Glu GAA GAG
Gly GGU GGC GGA GGG
His CAU CAC
Ile AUU AUC AUA
Lue UUA UUG CUU CUC CUA CUG
Lys AAA AAG
Met AUG
Phe UUU UUC
Pro CCU CCC CCA CCG
Ser UCU UCC UCA UCG AGU AGC
Thr ACU ACC ACA ACG
Trp UGG
Tyr UAU UAC
Val GUU GUC GUA GUG
... UAA UAG UGA

