He diseñado un programa que dada un secuencia, encuentra el triplete de inicio ATG y el de parada.
#!/usr/bin/perl
use strict;
use warnings;
# Leer el fichero
my $sequence = 'AAATTTTTTATGCCCTTTATGGGGTTTTAGTGACCCGGGTG';
my $i = 0;
my @orfs = $sequence =~ /(ATG(?:.{3})*?)(TAA|TAG|TGA|.{1,3}$)/g ;
foreach my $orf (@orfs) {
{
my @tripletes = ( $orf =~ m/\w{3}/g );
my $nueva_secuencia = join "-", @tripletes;
print $orf. "\n\n";
$i++;
}
}
print $i. "\n";
En este caso me sale por el terminal:
Using text Syntax Highlighting
i@usuario ~
$ ./prueba.pl
ATGCCCTTTATGGGGTTT
TAG
2
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
que sería la secuencia empezando por ATG hasta llegar al codón de parada TAG. Me muestra también el codón de parada TAG.
Pero tengo un problema que no entiendo: ¿Qué significa el 2 que sale por el terminal?
Cuando cambio la secuencia y pongo 'AAATTTTTTATGCGCCTTTATGGGGTTTTAGTGACCCGGGTG y no está en fase me saldría esto:
Using text Syntax Highlighting
i@usuario ~
$ ./prueba.pl
ATGCGCCTTTATGGGGTTTTAGTGACCCGG
GTG
2
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
por lo que ahora me sale GTG que no es el codón de parada, y me muestra la secuencia desde ATG hasta el codón final.
Yo quería que sólo me muestre la secuencia de tres en tres a partir de ATG hasta el codón de parada. ¿Qué me está fallando?
Muchas gracias.