• Publicidad

Problema inicialización de variable

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema inicialización de variable

Notapor marioalbertocer » 2011-12-06 17:05 @753

Buenas noches,

Estoy escribiendo un programa que me permite entrar en una base de datos por medio de FTP, tomar ciertos archivos que me interesan y guardarlos en mi disco duro.

Al correr el programa me sale el siguiente mensaje:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
readline() on closed filehandle FILE at bajargenomasbacterias.pl line 31.
Use of uninitialized value $nombre in pattern match (m//) at bajargenomasbacterias.pl line 32.
Use of uninitialized value $nombre in substitution (s///) at bajargenomasbacterias.pl line 37.
Use of uninitialized value $nombre in substitution (s///) at bajargenomasbacterias.pl line 38.
Use of uninitialized value $nombre in substitution (s///) at bajargenomasbacterias.pl line 39.
Can't use an undefined value as a symbol reference at bajargenomasbacterias.pl line 41.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Al final solo me está grabando el primer archivo tal cual yo lo quiero.

Adjunto el código que escribí.

De antemano muchas gracias a quien me pueda ayudar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use Net::FTP;
  5.  
  6. my $username = "anonymous";
  7. my $pwd      = "\n";
  8. my $ftp      = Net::FTP->new("ftp.ncbi.nlm.nih.gov")
  9.     or die("no se puede conectar al servidor: $!");    #entra a las bases de datos del NCBI
  10. $ftp->login( $username, $pwd ) or die("login incorrecto: $!");    # login y pass para poder entrar
  11.  
  12.                      #El directorio inicial donde se encuentran los subdirectorios donde están los archivos que quiero
  13. $ftp->cwd("genomes/Bacteria/");
  14.  
  15. my $Bacteria    = '';
  16. my @Directorios = $ftp->ls;
  17.  
  18. foreach $Bacteria (@Directorios) {     # Abro cada uno de los subdirectorios
  19.     unless ( $Bacteria =~ /\./ ) {
  20.         $ftp->cwd("$Bacteria/");
  21.  
  22.         my @archivos = $ftp->ls;
  23.         my $nombre   = '';
  24.         my $ffn      = '';
  25.  
  26.         foreach $ffn (@archivos) {     #Saco el archivo que está en el subdirectorio
  27.             if ( $ffn =~ /.ffn/ ) {
  28.                 $ftp->get( "$ffn", "$ffn" );    #Copio el el archivo a mi disco, pero pasa con un nombre que NO quiero
  29.                 open( FILE, $ffn );    #Abro el archivo para sacar el nombre que quiero de su primera línea
  30.  
  31.                 $nombre = <FILE>;      #saco el nombre tal como lo quiero
  32.                 if ( $nombre =~ /\[/ ) {
  33.                     $nombre =~ s/>.*\[\s//;
  34.                     $nombre =~ s/./\.ffn/;
  35.                 }
  36.                 else {
  37.                     $nombre =~ s/>.*[:,]c*[0-9]{1,}-[0-9]{1,}\s//;
  38.                     $nombre =~ s/,.*$/\.ffn/;
  39.                     $nombre =~ s/\//-/;
  40.                 }
  41.                 close $nombre;
  42.                 open( FILE, $ffn );
  43.  
  44.                 my $secuencia = '';    # reescribo el archivo con el nombre que quiero ponerle
  45.                 while ( $secuencia = <FILE> ) {
  46.                     open( NUEVO, ">>genomas_bacterianos/$nombre" );
  47.                     print NUEVO $secuencia;
  48.                 }
  49.                 unlink("$ffn") || &error( 'eliminar', 'archivo' );    #borro el archivo que tenía el nombre inicial
  50.             }
  51.             $ftp->cdup();              # me salgo del subdirectorio para poder entrar al otro que sigue.
  52.         }
  53.     }
  54. }
  55. $ftp->quit or die("No se pudo desconectar con el servidor: $!");
  56.  
  57. # Este hermoso código me permite introducirme en las bases de datos del NCBI
  58. # para descargar los genomas cloroplásticos para luego renombrarlos y guardarlos en la carpeta "genomas_cloroplastos".
  59.  
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
marioalbertocer
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-09-22 16:47 @741

Publicidad

Re: Problema inicialización de variable

Notapor explorer » 2011-12-06 17:35 @774

La línea 41 debería ser así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 close FILE;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero el error de la línea 31 se refiere a que no se ha podido abrir el archivo ffn en la línea 29.

Debes comprobar el valor devuelto por open(), para saber qué ha pasado.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 open( FILE, $ffn ) or die "ERROR: no puedo abrirlo $ffn: $!\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La variable especial $! guarda el mensaje de error, y la razón por la cual no puede abrirlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados

cron