• Publicidad

Usar variables de arreglo de hashes

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Usar variables de arreglo de hashes

Notapor perlo » 2007-09-06 09:29 @437

Soy nuevo en Perl y estoy haciendo un programa que reinicia varios routers pero no me funciona. Tengo un error de variables por lo que hago una consulta porque no puedo ver las variables... ¿Está mal el código?

Muchas gracias

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
!/usr/local/bin/perl
use Net::Telnet::Cisco;
my @ciscos = ({ip=>'1.1.1.1', user=>'test', pass=>'test1', root=>'root'});
for my $cisco (@ciscos) {

        my $session = Net::Telnet::Cisco->new(Host => '$ip');
        $session->login($cisco=>'$user', $cisco=>'$pass');
        my @output;
        #Enable mode
        if($session->enable($cisco=>'$root')) {
                $session->errmode(sub {die @_ unless $_[0] =~ /eof/});
                @output = $session->cmd("reload\n\n");}
        else {
                warn "Can't enable: " . $session->errmsg;}

}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
perlo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-11-08 07:55 @371

Publicidad

Notapor monoswim » 2007-09-06 11:29 @520

estás usando las referencias, tu tendrás un array donde cada elemento es una referencia a un hash...verdad ?

entonces en vez de

$session->login($cisco=>'$user', $cisco=>'$pass');

debes usar algo así como

$session->login($$cisco{'$user'}, $$cisco{'$pass'};

no lo probé pero debería de funcionar...

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor perlo » 2007-09-06 11:41 @528

Muchas Gracias por la respuesta, pero me dio un error :(
Use of uninitialized value in pattern match (m//) at /usr/lib/perl5/site_perl/5.8.8/Net/Telnet/Cisco.pm line 39.
write error: filehandle isn't open at reloadscript.pl line 19
perlo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-11-08 07:55 @371

Notapor explorer » 2007-09-06 11:42 @529

  • En la primera línea el shebang está mal escrito: falta el '#' inicial.
  • Defines la variable @ciscos de una forma bastante complicada, para un novato, pero suponemos que lo haces así porque te interesa conectarte a las máquinas en un determinado orden. Lo que has definido es un array con una lista de un solo elemento que es un array con cuatro pares clave/valor, con este contenido:
    Código: Seleccionar todo
    $VAR1 = {
              'pass' => 'test1',
              'ip' => '1.1.1.1',
              'user' => 'test',
              'root' => 'root'
            };
    por lo que en principio, está bien.
  • Dentro del bucle, estás usando los separadores '=>' en lugar de la indirección '->'. Y comillas simples alrededor de variables, impidiendo que se interpole su contenido. Por ejemplo, en lugar de $cisco=>'$user', deberías escribir $cisco->{user}.
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 perlo » 2007-09-06 12:10 @548

Muchísimas gracias por la respuesta , que tonto error de sintaxis que tenía :(
Son los mejores, saludos :)
perlo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-11-08 07:55 @371


Volver a Intermedio

¿Quién está conectado?

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