Bueno, esta es una solución basada en tu versión:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my %es_interesante;
# Lectura de la lista de secuencias
print "Enter your list name:\n";
my $entrada = <STDIN>;
chomp $entrada; # nos aseguramos que leemos bien el nombre del archivo
open(SEQ, $entrada) or die ("ERROR: $!\n");
while (my $linea = <SEQ>) {
$linea =~ s/^(?:\xEF\xBB\xBF|\xFE\xFF|\xFF\xFE)// if $. == 1; # quitar el BOM en la primera línea
$linea =~ s/[\012\015]+$//; # quitamos los finales de línea
$es_interesante{$linea} = 1; # la almacenamos en la memoria asociativa
}
close SEQ;
use Data::Dumper::Simple;
print Dumper %es_interesante; # comprobamos lo leído
__END__
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Hemos sustituido el chomp() por una expresión regular, que nos garantiza la eliminación de cualquier combinación de caracteres de final de línea (incluso de Mac). También quitamos el BOM de la primera línea.
El Dumper nos muestra que ahora sale correcta la estructura que queremos:
Using perl Syntax Highlighting
%es_interesante = (
'Agabi_varbisH97_2_121121' => 1,
'Agabi_varbisH97_2_59298' => 1,
'Agabi_varbisH97_2_71341' => 1,
'Agabi_varbisH97_2_118433' => 1,
'Agabi_varbisH97_2_194831' => 1
);
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
en lugar del estropicio que teníamos antes:
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo/alfumao> perl code_29648.pl
Enter your list name:
JGI_list2.txt
%es_interesante = (
'Agabi_varbisH97_2_136529' => 1,
' => 1, 'Agabi_varbisH97_2_181811
' => 1, 'Agabi_varbisH97_2_205367
' => 1, 'Agabi_varbisH97_2_80166
' => 1, 'Agabi_varbisH97_2_62215
' => 1, 'Agabi_varbisH97_2_113535
' => 1 'Agabi_varbisH97_2_189137
);
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Observa cómo los caracteres finales de línea, al final de los nombres de secuencia, hacen desplazar las comillas al borde izquierdo, excepto en el caso de la última $linea leída, ya que JGI_list2.txt no tiene esos caracteres en esa línea.
Esta es otra versión:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use File::Slurp;
my %es_interesante;
# Lectura de la lista de secuencias
print "Enter your list name:\n";
my $entrada = <STDIN>;
chomp $entrada;
my $fichero = read_file($entrada); # Leemos el fichero entero
$fichero =~ s/^(?:\xEF\xBB\xBF|\xFE\xFF|\xFF\xFE)//; # Quitar el BOM
my @lineas = split /[\012\015]+/, $fichero; # Separar las líneas, quitando los finales
for my $linea (@lineas) {
$es_interesante{$linea} = 1; # la almacenamos en la memoria asociativa
}
use Data::Dumper::Simple;
print Dumper %es_interesante;
__END__
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
El proceso es ligeramente distinto: haces todo el procesamiento en memoria, leyendo el archivo completamente, y usando split() para hacer la división de las líneas.