Newsgroup: it.comp.lang.perl
Titolo: script che funziona solo su alcune macchine

Salve a tutti!
 Ho uno script (un bot IRC) che funziona perfettamente sul mio PC (xp + 
ActivePerl) e su di un server Linux Ubuntu, ma inspiegabilmente si rifiuta 
di funzionare su di una terza macchina (un altro server Linux Ubuntu), tutte 
le macchina hanno installata la versione 5.8.8 di Perl.
Sulla macchina dove riscontro problemi ricevo il seguente messaggio (dopo 
circa 20 secondi dal lancio):
$ perl -w 
bot.pl
Error! Bad file descriptor
1 at 
bot.pl
 line 15
a questo punto per tagliare la testa al toro, ho ridotto all'osso il mio 
script per ridurre al minimo le probabilita' di un mio errore, quindi 
praticamente ho tolto tutta la parte di gestione del canale IRC ed ho 
lasciato solo la parte funzionale alla connessione al server. Lo script 
risultante e' il seguente:
use strict;
use IO::Socket;
my $con = undef;
my $answer = undef;
$con = IO::Socket::INET->new(PeerAddr=>'
irc.mioserver.net
',
                             PeerPort=>'6667',
                             Proto=>'tcp',
                             Timeout=>'30') or die print "Error! $!\n";
print $con "USER heaven portiere e guardiano ufficiale\r\n";
print $con "NICK ArcAng3lo\r\n";
print $con "ns identify ***** \r\n";
print $con "JOIN #liftman\r\n";
while($answer = <$con>)
{
        print $answer;
        if($answer =~ m/^PING (.*?)$/gi)
        {
                print $con "PONG ".$1."\r\n";
        }
}
il risultato della prova e' che sulle medesime macchine sulle quali lo 
script completo funzionava perfettamente, continua a funzionare 
perfettamente anche questa porzione di codice, mentre sulla terza macchina 
il risultato e' il seguente (sempre dopo una 20ina di secondi):
$ perl -w 
botminimo.pl
Error! Bad file descriptor
1 at 
botminimo.pl
 line 5.
ovviamente, prima che eventualmente mi venga chiesto, su tutte e 3 le 
macchine e' installato il modulo IO::Socket.
suggerimenti?
-- 
Ciao!
Se hai voglia e tempo visita il mio sitarello!
www.moredifficult.org
www.liftman.org
http://florezia.myminicity.com
 


Direi che IO::Socket non è installato correttamente nella macchina
dove viene dato l'errore, oppure che non ti è consentito aprire socket
verso quella destinazione. Ho visto nell'altro thread (perché aprirne
uno nuovo, poi?) che hai fatto la prova che ti avevo suggerito ma non
ha dato luogo ad errori, potresti provare ad andare avanti utilizzando
l'interfaccia "built-in" per i socket (che è più a basso livello) e
vedere dove viene fuori l'errore, se viene.
E' lecito assumere che IO::Socket sia stato installato "correttamente"
e non semplicemente copiato fra le varie macchine? Considera che si
tratta di un modulo con codice XS, il che richiede l'installazione di
un pacchetto compilato apposta (parlo di ActivePerl) oppure la sua
compilazione (cosa che di solito avviene sotto Linux, con notevoli
eccezioni al giorno d'oggi).
Suggerimento OT: quando dichiari una variabile in Perl questa viene
automaticamente inizializzata al valore undef, non hai bisogno di
farlo esplicitamente.
Altro suggerimento OT: "die" già stampa il messaggio su STDERR, non
hai bisogno di mettere "print".
Ciao,
   Flavio.

    Flavio.
Ciao! 

 typed:

Il fatto che per cpan ti funzioni LWP è piuttosto sospetto, sei sicuro
di non avere più installazioni di perl nella tua macchina?
In generale il fatto che ti dica che è aggiornato non è da ritenersi
conclusivo, l'importante comunque è che tu l'abbia installato in
maniera "ortodossa" e non copiando semplicemente alcuni file da
un'altra macchina.
Ciao,
   Flavio.

 un'altra macchina.
su questo sono arcisicuro, non sono imbranato fino a quel punto :) pero' in 
ogni caso se provo a reinstallare il modulo mi dice che e' "updated"
-- 
Ciao!
