#!/usr/bin/perl -w
#MeowChow from http://www.perlmonks.com/ 
use strict;

my $dna = <<'DNA';
 CG
T--A
A---T
A----T
 C----G
  T----A
   A---T
    G--C
     CG
     CG
    C--G
   G---C
  G----C
 C----G
A----T
C---G
G--C
 AT
 CG
A--T
A---T
G----C
 A----T
  G----C
   C---G
    A--T
     GC
     CG
    G--C
   A---T
  G----C
 G----C
G----C
A---T
T--A
 AT
 CG
T--A
C---G
A----T
 A----T
  G----C
   A---T
    A--T
     CG
     TA
    T--A
   G---C
  G----C
 C----G
A----T
C---G
G--C
 CG
 TA
T--A
C---G
T----A
 C----G
  A----T
   C---G
    G--C
     GC
     TA
    G--C
   C---G
  G----C
 G----C
G----C
A---T
T--A
 CG
 AT
G--C
A---T
A----T
 C----G
  C----G
   A---T
    A--T
     CG
     CG
    G--C
   G---C
  G----C
 A----T
T----A
C---G
G--C
 CG
 TA
A--T
A---T
G----C
 A----T
  A----T
   C---G
    A--T
     GC
     TA
    G--C
   C---G
  T----A
 G----C
G----C
C---G
T--A
 AT
 CG
G--C
G---C
T----A
 C----G
  G----C
   C---G
    C--G
     CG
     AT
    T--A
   C---G
  G----C
 G----C
A----T
T---A
G--C
 CG
 TA
G--C
A---T
G----C
 A----T
  G----C
DNA

my %base_map = (
  'A' => 0,
  'C' => 1,
  'G' => 2,
  'T' => 3,
);

my @rna_strand;

#first, let's process each single line on it's own
foreach my $dna_strand (split /\n/, $dna)
{

	#and extract the 2 base components
	$dna_strand =~ /.*(\w).*(\w).*/;

	#and we pick one
	my $picked_base;

	#let's alternate from left to right with a frequency of 9
	if ((scalar(@rna_strand) / 9) % 2)
	{
		$picked_base = $2;
	}
	else
	{
		$picked_base = $1;
	}

	#now let's convert the picked base to it's numerical value with %base_map
	push @rna_strand, $base_map{$picked_base};
}

#Not time to extrace information from the genes
my $genetic_code;

#process every piece of the RNA strand in sequence, 4 by 4
while (scalar(@rna_strand))
{
	$genetic_code .= chr((64 * shift @rna_strand) + (16 * shift @rna_strand) + (4 * shift @rna_strand) + (shift @rna_strand));
}

#finally, execute RNA code
eval $genetic_code;

#comments brought to you by <gozer@cpan.org>


syntax highlighted by Code2HTML, v. 0.9