La estructura de datos es la mínima: por cada parte, tenemos unas @features_cds y un $origin. Lo del $origin está claro: todos los nucleótidos puestos en secuencia, en una variable escalar. Y las @features_cds es un array, del que cada elemento es un hash, que tiene como claves 'parte' y 'nombre', que guardan, respectivamente, el inicio y fin de la posición de la secuencia (en un array) y el nombre del gen.
Y luego a la hora de imprimir el resultado, consiste en repasar todas las @features_cds encontradas y sacar la información del $origin.
Si hay algo que no entiendes, pregunta por él. Si es todo, vamos por partes y te lo explico, pero supongo que sabrás algo de Perl, ya que, también supongo, que si te han encargado algo es porque habrás recibido algún curso o estarás aprendiendo por tu cuenta.
En cuanto a lo de extraer la secuencia de tres en tres se puede hacer de varias formas, siendo una de ellas el substr(), naturalmente.
Using perl Syntax Highlighting
my $origin = 'atgattcctggtaaccgaatgct';
for ( my $i = 0; $i < length $origin; $i += 3 ) {
print substr $origin, $i, 3;
print "\n";
}
for ( my $i = 0; $i < length $origin; $i += 3 ) {
print substr $origin, $i, 3;
print "\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4