Odd number of elements in hash assignment
Publicado: 2017-11-26 06:58 @332
Buenos días.
Estoy intentando crear un módulo de perl que me recorra línea a línea un archivo Uniprot y que devuelva un hash multidimensional a partir del cual el programa principal me permita imprimir a la salida estándar los campos ID, DE, DT, OS y SQ de cada entrada del archivo uniprot.
Sé que hay alguna entrada a la que le falta alguno de los campos, y creo que esto es lo que está haciendo que cuando lanzo el programa principal obtenga el siguiente mensaje de error en la consola:
Odd number of elements in hash assignment at Intento1.pl line 28, <INFILE> line 2.
He intentado declarar las variables vacías antes de declarar el hash, pero eso tampoco me funciona... ¿Alguien me podría ayudar?
Muchas gracias.
Módulo
Programa principal
Estoy intentando crear un módulo de perl que me recorra línea a línea un archivo Uniprot y que devuelva un hash multidimensional a partir del cual el programa principal me permita imprimir a la salida estándar los campos ID, DE, DT, OS y SQ de cada entrada del archivo uniprot.
Sé que hay alguna entrada a la que le falta alguno de los campos, y creo que esto es lo que está haciendo que cuando lanzo el programa principal obtenga el siguiente mensaje de error en la consola:
Odd number of elements in hash assignment at Intento1.pl line 28, <INFILE> line 2.
He intentado declarar las variables vacías antes de declarar el hash, pero eso tampoco me funciona... ¿Alguien me podría ayudar?
Muchas gracias.
Módulo
Using perl Syntax Highlighting
- package Utils::Uniprot;
- use strict;
- use warnings;
- use Exporter;
- our @ISA = qw(Exporter);
- our @EXPORT = qw(ParseUniprot);
- my $path;
- my $ID;
- my $DE;
- my $OS;
- my $DT;
- my $SQ;
- sub ParseUniprot {
- my ($path) = @_;
- open( OUT, ">resultado.txt" );
- my $linea;
- open( INFILE, "$path" ) || die "$!:No se puede leer el archivo Uniprot_archea.txt\n\n";
- while ( $linea = <INFILE> ) {
- chomp $linea;
- if ( $linea =~ /^ID\s{3}(\S+)\s+\S+\s+\d+/ ) {
- $ID = $1;
- next;
- }
- if ( $linea =~ /^DE\s+\w+/ ) {
- $DE .= $linea;
- $DE =~ s/DE//g;
- next;
- }
- if ( $linea =~ /^DT\s{3}\S+\s\w{5}\s\w{7}\s\d+/ ) {
- $DT = $linea;
- $DT =~ s/DT//g;
- next;
- }
- if ( $linea =~ /^OS\s{3}/ ) {
- $OS .= $linea;
- $OS =~ s/OS//;
- next;
- }
- if ( $linea =~ /^\s{3}/ ) {
- $SQ .= $linea;
- $SQ =~ s/\s+//g;
- }
- $DE = ();
- $OS = ();
- $DT = ();
- $SQ = ();
- my @list = ( $DE, $DT, $OS, $SQ );
- my %resultados;
- $resultados{ID} = [@list];
- return (%resultados) . "\n";
- }
- close OUT;
- }
- 1;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
Programa principal
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use warnings;
- BEGIN{
- use Getopt::Long;
- die "You have and *old* version of Getopt::Long, please",
- "update it asap!!\n"
- unless Getopt::Long->VERSION>=2.5;
- }
- use Getopt::Long;
- use lib '/home/alumno/Perl_modules/';
- use Utils::Uniprot;
- my $path;
- my %info;
- my %resultados;
- my $dato;
- GetOptions (
- "path=s"=>\$path,
- );
- if ($path) {
- my %info=ParseUniprot($path);
- foreach my $info (sort keys %resultados){
- print $info{ID}[0]."\n";
- print $info{ID}[1]."\n";
- print $info{ID}[2]."\n";
- print $info{ID}[3]."\n";
- }
- }
- else {
- print "USAGE:: perl $0 -path=/home/alumno/asignatura_10/Semana4/Uniprot_archea.txt\n";
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4