El problema está en la comparación de la línea 23.
Using perl Syntax Highlighting
unless ( $cod != $linea ) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
¿Cuánto vale
$cod? Pues es el quinto campo de cada línea de
blastx_l.txt. Una cadena de caracteres.
¿Cuánto vale
$linea? Es cada una de las líneas de
Col_cod.txt. Una cadena de caracteres, terminada con caracteres de avance de línea.
Y ya vemos el problema. Mejor dicho, los dos problemas.
- Estás usando el operando de comparación numérica '!=', y los operandos no son números, sino cadenas de caracteres.
- $linea tiene uno o dos caracteres extra, al final, que no deseas utilizar en la comparación: los caracteres de fin de línea (avance de línea y/o retorno de carro).
Las soluciones son:
* Quitar los caracteres de avance de línea leídos desde Col_cod.txt:
Using perl Syntax Highlighting
chomp @lista_cod;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
* Hacer que la comparación sea alfanumérica:
Using perl Syntax Highlighting
unless ( $cod ne $linea ) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Mejor así:
Using perl Syntax Highlighting
if ( $cod eq $linea ) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y así queda más claro (¿Es $cod igual a $linea?)
Otra forma de resolverlo, más rápido, es hacer que los códigos sean claves de un
hash. Así nos ahorramos un bucle interior:
Using perl Syntax Highlighting
#!/usr/bin/env perl
use autodie;
## Leemos los códigos y los pasamos a un hash
my %codigos;
open my $CODIGOS, '<', 'Col_cod.txt';
while (my $cod = <$CODIGOS>) {
chomp $cod; # quitamos caracteres de fin de línea
$codigos{$cod} = 1; # lo almacenamos como clave de un hash
}
close $CODIGOS;
## Leemos los registros BLAST
open my $FILE_BLAST, '<', 'blastx_l.txt';
while (my $blast = <$FILE_BLAST>) { # para cada registro BLAST
my($cod) = (split " ", $blast)[4]; # quinto campo del registro
if (exists $codigos{$cod}) { # ¿ese código existe en nuestra lista de códigos?
print $blast; # sí, sacamos todo el registro en pantalla
}
}
close $FILE_BLAST;
__END__
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4