Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Usar variables de arreglo de hashes

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Sep 06, 2007 8:29 am
perlo
Perlero Nuevo
Perlero Nuevo
Registrado: 08 Nov 2006
Mensajes: 17
Usar variables de arreglo de hashes Responder citando

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

Perl:
!/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;}

}
Mensaje Jue Sep 06, 2007 10:29 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

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
Mensaje Jue Sep 06, 2007 10:41 am
perlo
Perlero Nuevo
Perlero Nuevo
Registrado: 08 Nov 2006
Mensajes: 17
Responder citando

Muchas Gracias por la respuesta, pero me dio un error Sad
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
Mensaje Jue Sep 06, 2007 10:42 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando


  • 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:
    $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}.
Mensaje Jue Sep 06, 2007 11:10 am
perlo
Perlero Nuevo
Perlero Nuevo
Registrado: 08 Nov 2006
Mensajes: 17
Responder citando

Muchísimas gracias por la respuesta , que tonto error de sintaxis que tenía Sad
Son los mejores, saludos Smile
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group