El problema es el siguiente: el archivo no tiene varias líneas, sino que solo tiene
una línea.
Hay que hacer unos cambios...
Using perl Syntax Highlighting
#!/usr/bin/env perl
# Detector de tripletes de aminoácidos
# Joaquín Ferrero, 20120518
use strict;
use warnings;
use diagnostics;
use autodie; # «Es mejor morir que regresar con deshonor» --proverbio Klingon
my %tripletes = (
'CAG TTA' => 'Alanina',
'CTT TGA' => 'Alanina',
'GAC GAT' => 'Asp',
);
open my $SEQS, '<', 'result1.txt';
while (my $linea = readline $SEQS) { # para todas las líneas del archivo (si hubieran)
chomp $linea;
for my $triplete (keys %tripletes) { # para todos los tripletes que buscamos
my $pos = index $linea, $triplete;
if ($pos != -1) { # ¿hay alguno?
print "contiene $tripletes{$triplete} en posición $pos\n";
}
}
}
close $SEQS;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Con este programa, sale el siguiente resultado:
Using text Syntax Highlighting
contiene Asp en posición 7072
contiene Alanina en posición 52
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Usamos un
hash para relacionar los tripletes que buscamos con el nombre que queremos imprimir.
Leemos cada línea del archivo de entrada (aunque sabemos que solo hay una), y por cada triplete a buscar, lo hacemos con index(), que nos localiza rápidamente lo que queremos.
Y en cuanto a que te sale una cosa distinta cada vez que pruebas... pues porque Perl es muy liberal en cuanto a lo que admite como sintaxis correcta, pero no siempre lo que escribimos es lo que queremos que Perl haga. Hay que escribir siempre la sintaxis correcta. Y las expresiones regulares tienen sus reglas.