Newsgroup: it.comp.lang.perl
Titolo: Problemi con Net::Telnet::Cisco

Ciao a tutti, ho un piccolo (grande) problemino con la libreria in oggetto.
Premetto che sono piuttosto novizio del linguaggio e quindi potrei 
essere disperso in un bicchier d'acqua...
In un vecchio applicativo (giï¿œ stabile ed abbondantemente testato da 
altri) ho aggiunto del codice scrivendo due poller esterni.
In uno non ho avuto bisogno della libreria Net::Telnet::Cisco mentre 
nell'altro sï¿œ.
Aggiungendo solo il primo poller (quello senza Net::Telnet::Cisco) e 
lanciando l'applicativo non ricevo alcun errore, mentre se aggiungo il 
secondo (che utilizza la libreria Net::Telnet::Cisco) appena lancio 
l'applicazione ricevo una serie infinita di warning...
La cosa strana ï¿œ che per scrivere il secondo poller ho praticamente 
usato come base il primo (l'aggiunta all'applicativo base ï¿œ quindi 
corretta), inoltre se modifico il codice un po' e uso il poller come 
applicazione standalone tutto funziona correttamente e senza alcun problema.
Una precisazione sia usando che non lo "use strict" che lo "use 
warnings"  gli errori vengono presentati...
L'output di perl -v ï¿œ: il seguente: This is perl, v5.8.8 built for 
i486-linux-gnu-thread-multi
Quello di uname -r ï¿œ: Linux devel 2.6.18-4-xen-vserver-686 #1 SMP Thu 
May 10 04:02:17 UTC 2007 i686 GNU/Linux
Il tutto su una Debian 4.0 (su xen).

 l'applicazione ricevo una serie infinita di warning...
Ci puoi far vedere questi warning?
s.
-- 
Stefano Rodighiero      |  
http://www.stefanorodighiero.net
mailto:
lar...@perl.it
   |  Italian Perl Mongers: 
http://www.perl.it

 
Sï¿œ certo, mea culpa per non averlo fatto prima...
"my" variable $snp_port masks earlier declaration in same statement at 
/usr/local/neaNMS/lib/Houston/Functions.pm line 23.
"my" variable $snp_timeout masks earlier declaration in same statement 
at /usr/local/neaNMS/lib/Houston/Functions.pm line 23.
"my" variable $sth_select masks earlier declaration in same scope at 
/usr/local/neaNMS/lib/Houston.pm line 1155.
Useless use of bitwise and (&) in void context at 
/usr/local/neaNMS/lib/Houston/RRD.pm line 246.
\1 better written as $1 at /usr/local/neaNMS/lib/Houston/RRD.pm line 612.
\2 better written as $2 at /usr/local/neaNMS/lib/Houston/RRD.pm line 612.
\1 better written as $1 at /usr/local/neaNMS/lib/Houston/RRD.pm line 619.
\2 better written as $2 at /usr/local/neaNMS/lib/Houston/RRD.pm line 619.
\1 better written as $1 at /usr/local/neaNMS/lib/Houston/RRD.pm line 1374.
\2 better written as $2 at /usr/local/neaNMS/lib/Houston/RRD.pm line 1374.
\1 better written as $1 at /usr/local/neaNMS/lib/Houston/RRD.pm line 1377.
\2 better written as $2 at /usr/local/neaNMS/lib/Houston/RRD.pm line 1377.
Name "main::opt_p" used only once: possible typo at 
/usr/local/neaNMS/bin/
houston.pl
 line 35.
Name "main::opt_f" used only once: possible typo at 
/usr/local/neaNMS/bin/
houston.pl
 line 34.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1164.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1165.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1166.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1167.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1168.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1169.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1170.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1171.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1172.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1173.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 492.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 493.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 494.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 496.
Da quel che mi pare non sono errori del poller, ma mi chiedo perchï¿œ 
spuntino fuori solo inserendo la libreria Net::Telnet::Cisco
Grazie anticipatamente...

 [...]
A giudicare dai messaggi di warning che riporti, la causa non 
mi pare sia interna a Net::Telnet::Cisco. Invece, credo che il
problema dipenda da come avviene la use di questo modulo 
all'interno del tuo codice. Puoi mostrare il brano che gestisce
i due poller ?
Inoltre, dici "mentre se aggiungo il secondo (che utilizza la 
libreria Net::Telnet::Cisco)", cosa che mi fa supporre che il 
secondo poller sia una libreria tua che a sua volta fa uso 
di Net::Telnet::Cisco: secondo me la magagna sta in questa 
libreria. 
Ad ogni modo, mi sembrano warning innocui che si possono 
correggere facilmente, tanto piu` che se e` tutto vero quel 
che dico dovresti avere accesso diretto al codice.


Posto il codice del poller "incriminato". Quel che dici � vero 
(nonostante la mia ingnoranza in materia lo ammetto) i problemi non sono 
nel codice del poller ma nel resto del programma. La cosa strana � che 
questi warning non comparivano prima di inserire questo fantomatico poller.
use Exporter ();
use Houston::Conf;
use Houston::Functions;
use Net::Telnet::Cisco;
use strict;
our @ISA = qw(Exporter);
our @EXPORT = qw(&cisco_active_isdn_flows);
sub cisco_active_isdn_flows {
     my $host = shift;
     my $snmpprofile = shift;
     my $args = shift;
     my $user = $args->[0];
     my $pass = $args->[1];
     my $enable_pass = $args->[2];
     my $timeout = '10';
     my $errmode = 'die';
     my $activeCommand = 'show isdn status | include CCB:callid';
     my $activeCCBsCount = 0;
     my ($session, @output);
     $session = Net::Telnet::Cisco->new(
                         Host => ${host},
                         Timeout => ${timeout},
                         Errmode => ${errmode}, );
     if( !$session->login($user, $pass) ) {
             return(1, 'Wrong username or password!', 0, 0);
     }
     if( !$session->enable($enable_pass) ) {
             return(1, 'Wrong enable password!', 0, 0);
     }
     @output = $session->cmd($activeCommand);
     $activeCCBsCount = grep(/CCB/, @output);
     $session->close;
     return(0, 'OK', $activeCCBsCount);
}
# ------------------------------------------------------ #
1;
Il codice mi pare corretto anche perch� se lo eseguo (impostando un po' 
di variabili come l'ip in maniera hard nel codice) e modificando i 
return con una bella stampa, per non mi da alcun warning...

 questi warning non comparivano prima di inserire questo fantomatico poller.
Gli warning che produce sono divisibili in 4 gruppi:
1. 
"my" variable $snp_port masks earlier declaration in same statement at 
/usr/local/neaNMS/lib/Houston/Functions.pm line 23.
2.
\1 better written as $1 at /usr/local/neaNMS/lib/Houston/RRD.pm line
612.
3.
Use of uninitialized value in array element at 
/usr/local/neaNMS/lib/Houston.pm line 1172.
4.
Name "main::opt_p" used only once: possible typo at 
/usr/local/neaNMS/bin/
houston.pl
 line 35.
Cioe` provengono da Houston::Function, da Houston::RRD, dal
modulo Houston oppure da 
houston.pl
, che immagino sia lo 
script driver di tutto. 
Nel codice che hai riportato si vede la use di Houston::Functions,
che immagino a sua volta chiami Houston::RRD e Houston.
Non si tratta di moduli CPAN. 
Insomma, la morale e` che gli warning non dipendono da moduli 
della gerarchia Net::Telnet, bensi` da codice proprietario 
tuo, al quale penso tu abbia accesso. 


 
PS in questi giorni ho trovato il libro che hai scritto non conoscendo 
il linguaggio l'ho preso al volo sperando che possa aiutarmi. Grazie 
ancora per l'aiuto

 [...]
grazie a te, ciao
