• Publicidad

Errores en script

¿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 script

Notapor mulambo » 2008-04-18 10:30 @479

Hola. ¿Cómo están? He creado un script de conexión FTP que funcionaba perfectamente y desde ayer me está dando los siguientes errores:

Código: Seleccionar todo
 Global symbol "$arch_local" requires explicit package name at huawei.pl line 5.
Global symbol "$puerto" requires explicit package name at huawei.pl line 6.
Global symbol "$source" requires explicit package name at huawei.pl line 7.
Global symbol "$username" requires explicit package name at huawei.pl line 8.
Global symbol "$passwd" requires explicit package name at huawei.pl line 9.
Global symbol "$archivo" requires explicit package name at huawei.pl line 11.
Global symbol "@registros" requires explicit package name at huawei.pl line 12.
Global symbol "$cadena" requires explicit package name at huawei.pl line 14.
Global symbol "@registros" requires explicit package name at huawei.pl line 14.
Global symbol "$cadena" requires explicit package name at huawei.pl line 16.
Global symbol "$charr" requires explicit package name at huawei.pl line 18.
Global symbol "$archivo" requires explicit package name at huawei.pl line 19.
Global symbol "$archivo" requires explicit package name at huawei.pl line 24.
Global symbol "$ftp" requires explicit package name at huawei.pl line 28.
Global symbol "$source" requires explicit package name at huawei.pl line 28.
Global symbol "$puerto" requires explicit package name at huawei.pl line 28.
Global symbol "$source" requires explicit package name at huawei.pl line 28.
Global symbol "$ftp" requires explicit package name at huawei.pl line 29.
Global symbol "$username" requires explicit package name at huawei.pl line 29.
Global symbol "$passwd" requires explicit package name at huawei.pl line 29.
Global symbol "$ftp" requires explicit package name at huawei.pl line 29.
Global symbol "$ftp" requires explicit package name at huawei.pl line 30.
Global symbol "$ftp" requires explicit package name at huawei.pl line 31.
Global symbol "$archi" requires explicit package name at huawei.pl line 31.
Global symbol "$arch_local" requires explicit package name at huawei.pl line 31.
Global symbol "$ftp" requires explicit package name at huawei.pl line 32.
Unmatched right curly bracket at huawei.pl line 51, at end of line


Aquí coloco el código fuente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Net::FTP;
use Mail::Sendmail;
use strict;
use POSIX 'strftime';
my $arch_local=$ARGV[0];
my $puerto='55555';
my $source="DIR IP";
my $username="usr";
my $passwd="pswd";
open (ARCHI,"Occidente.txt");
my $archivo="";
@registros=<ARCHI>;
my $num=0;
foreach $cadena (@registros)
{
        if ($cadena =~ /\\([^\\]+\.txt)/m)
        {
                $charr=~ /\\([^\\]+\.txt)/m;
                $archivo = $1;
                #print $archivo;
               
        }      
}
print "$archivo\n";
#$archivo=~ tr /'\-'/'\\.o\-'/;
#print "$archivo\n";
close (ARCHI);
$ftp = Net::FTP->new(Host => $source, Port => $puerto, Passive => 1, Debug => 1) or die "No puedo conectarme a $source: $@";
$ftp->login($username,$passwd) or die "No puedo conectarme ", $ftp->message;
$ftp->binary;
if ( not $ftp->get($archi, $arch_local) ) {
        warn "Fallo el get ", $ftp->message;
        #SE ENVIA EL CORREO ALERTANDO QUE NO SE CONSIGUIÓ EL ARCHIVO EN EL HLR.
        # Creamos el hash con nuestro mensajes
        my %mail = (
        To => '[email protected]',
        From => '[email protected]',
        Subject => 'Falla en archivo Occidente',
        Message => 'No se ha encontrado el ImsiFile perteneciente a la region Occidente. Favor verificar',
        Smtp => 'servidor.de.correo'
        );
        # Envíar el mensaje
        unless (sendmail(%mail)) {
        # Error!
        print "ERROR\n";
        exit(1);
        }
        # Envío correcto.
        exit(1);
    }
}
$ftp->delete("$archivo");
$ftp->quit;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4



Por favor, ¿alguien me podría ayudar con eso?
¡Muchísimas gracias!
mulambo
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2007-08-14 10:06 @462

Publicidad

Notapor explorer » 2008-04-18 13:21 @597

Pues...

* No veo la primera línea con el shebang.
* No veo porqué debe fallar las líneas que comienzan por 'my'... salvo que las comillas que rodean a 'strftime' no sean las 'simples'.
* Sobra un carácter '}', al final.
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

Notapor Jenda » 2008-04-19 18:38 @818

Si tienes un syntax error en to código, no te preocupes por los "Global symbol ..." u otros tipos de errores. Un syntax error puede desorientar perl de tal manera que sale un montón de mensajes pegadizos.
Creo que el único mensaje que tiene razón es la última, sobre el }. Tienes uno } más que los que debes.
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa

Notapor mulambo » 2008-04-23 09:35 @441

Hola. Gracias por sus respuestas. Resulta que tuve que colocarle "my" a todas las variables que no tenían el prefijo de declaración y pude resolver el problema.

Si alguno tiene una explicacion a esto lo agradecería muchísimo.

Saludos,

Mulambo
mulambo
Perlero nuevo
Perlero nuevo
 
Mensajes: 22
Registrado: 2007-08-14 10:06 @462

Notapor explorer » 2008-04-23 10:16 @469

Es un efecto 'secundario', pero beneficioso, del 'use strict;'

Poniéndolo, te obligas a ti mismo a programar de forma 'estricta'. Por ejemplo: si usas una variable, esa variable debe haber sido declarada en algún sitio, indicando si es local, global, de otro paquete externo, etc., porque sino, la tomaría simplemente como global.
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 10 invitados

cron