Jue Sep 06, 2007 8:29 am
|
 |
perlo
Perlero Nuevo

|
Registrado: 08 Nov 2006
Mensajes: 17
|
|
| Usar variables de arreglo de hashes |
|
|
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; }
} |
|
|
|
|

Jue Sep 06, 2007 10:29 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|
Jue Sep 06, 2007 10:41 am
|
 |
perlo
Perlero Nuevo

|
Registrado: 08 Nov 2006
Mensajes: 17
|
|
|
|
|
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 |
|

Jue Sep 06, 2007 10:42 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
- 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}.
|
|

Jue Sep 06, 2007 11:10 am
|
 |
perlo
Perlero Nuevo

|
Registrado: 08 Nov 2006
Mensajes: 17
|
|
|
|
|
Muchísimas gracias por la respuesta , que tonto error de sintaxis que tenía
Son los mejores, saludos  |
|
Powered by phpBB © 2001, 2005 phpBB Group
|