#!/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