Más sencillo... pues no se me ocurre cómo... está lo mínimo para leer el fichero, guardar la información y luego extraerla según lo indicado...
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.