• Publicidad

Errores en programa con Net::FTP

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

Errores en programa con Net::FTP

Notapor enric73 » 2013-03-30 18:33 @814

Hola, perleros. Tengo un problema con el siguiente código para transferir ficheros de mi disco duro a un servidor remoto.

Quiero pasar todos los ficheros .htm que se encuentran en el directorio de mi ordenador /home/enric/htm al servidor (dispongo del nombre, usuario y contraseña).

Aquí va el código:
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 = "meteoxx.com";
  7. my $pwd = "xxxxx73";
  8.  
  9. my $ftp = Net::FTP->new("xxx.xx.132.xxx", Debug => 0) or die("No se pudo conectar al servidor: $!");
  10. $ftp->login($username,$pwd) or die("Login incorrecto: $!");
  11. #ACCIONES QUE QUEREMOS EJECUTAR EN EL SERVIDOR
  12. $ftp->cwd("htm/"); #carpeta /htm dentro del servidor remoto
  13. my @arxius = $ftp->ls("/home/enric/htm"); #carpeta htm en mi ordenador personal
  14. foreach $File(@arxius){
  15. $ftp->put("$File");
  16. }
  17. $ftp->quit or die("No se puedo desconectar del servidor: $!");
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Al ejecutar el script me salen los siguientes errores:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
-bash-3.2$ ./ftp.pl
Global symbol "$File" requires explicit package name at ./ftp.pl line 14.
Global symbol "$File" requires explicit package name at ./ftp.pl line 15.
Execution of ./ftp.pl aborted due to compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿A qué se debe?

¡Muchas gracias!

Saludos
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Errores en programa con Net::FTP

Notapor explorer » 2013-03-30 20:15 @885

En la línea 3 activaste el modo estricto. Eso quiere decir que a partir de ese momento, todo código que escribas debe seguir una serie de reglas, encaminadas, sobre todo, a reducir los errores de sintaxis.

Por eso, cuando Perl llega a la línea 14, se encuentra por primera vez con la variable $File, y como no sabe dónde ha sido declarada, sale el mensaje de error. Lo mismo pasa con la línea siguiente: no sabe dónde ha sido declarada, si es una variable declarada en otro paquete o es una variable global de nuestro mismo programa o es una variable local al programa, o si es una variable local del bucle foreach().

En este caso, se resuelve de forma fácil. Como se ve claro que se trata de una variable local, del propio bucle foreach(), se puede modificar la línea 14 así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $File(@arxius) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y con eso ya estamos declarando a la variable como local del bucle.

Por otra parte, creo que la línea 13 no es correcta. Estás solicitando un ls() a un directorio local, pero ese método se refiere a obtener un listado de un directorio remoto, en el servidor.

Si quieres tener un listado de los archivos .htm en tu directorio local, debes usar otro método. Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @arxius = glob("/home/enric/htm/*.htm");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Errores en programa con Net::FTP

Notapor enric73 » 2013-03-31 05:46 @282

¡Muchas gracias! ¡Resuelto! Vigilaré con el módulo strict.

Un saludo.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311


Volver a Básico

¿Quién está conectado?

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