Socket

Stato
Discussione chiusa ad ulteriori risposte.

edo1493

Utente Silver
13 Settembre 2008
79
16
1
79
Sto avendo dei problemi con un IRC bot che sto scrivendo grazie all'aiuto di guide e di un altro bot. Ho aggiunto la funzione time():

Codice:
if($rcv =~ /!time/) {
   
     @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
     @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
     ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
     $year = 1900 + $yearOffset;
     $theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
     print sock "PRIVMSG $chan : $theTime\r\t"; #riga 86!!! 

}

Quando su IRC digito !time, non esce nulla in output, sul terminale esce questo errore:
print() on unopened filehandle sock at edo.pl line 86, <GEN0> line 80.

Non capisco perchè la riga 86 ha problemi..:dodgy:
 
...... forse intendevi print $sock ....
Sempre se fai roba tipo:
Codice:
my $sock = IO::Socket::INET->new (ecc);
while (<$sock>) {
    #code
}
E poi porco cane:
1) metti use strict e use warnings all'inizio, vedrai quanti warning / errori sulla sintassi ti darà.
2)
Codice:
     @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
     @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
     ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
     $year = 1900 + $yearOffset;
     $theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
Ma chi te l'ha insegnato il Perl?
Le variabili vanno dichiarate con my/our prima. Codice buono e giusto:
Codice:
     my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
     my @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
     my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
     my $year = 1900 + $yearOffset;
     my $theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
Oppure te le dichiari prima con una roba tipo my ($x, $y, $z, $a #ecc).
Ritorna a giocare con il tuo pupazzetto dello GNU.
 
:omfg: Non hai risposto alla mia domanda.
Quel codice per il calendario l'ho preso dalla documentazione ufficiale :omfg:

Use warnings l'avevo già messo --->
Codice:
 #! usr/bin/perl -w


---------------------
Anzi ripensandoci trovo la tua risposta totalmente inutile.
 
La roba presa dalla documentazione dei moduli è solo indicativa, la sintassi è tutta da correggere...
Hai controllato se effettivamente nelle variabili c'è il valore giusto?
E poi ha perfettamente ragione Robertof, manca la giusta dichiarazione delle variabili con my (e l'uso di strict).
E poi quel sock (line 86) non dovrebbe essere una variabile con il socket dentro ($sock)? :omfg:
 
Non sei un utente utile per il forum, non si può avere una discussione costruttiva con te, tra l'altro vuoi essere aiutato, poi dici di aver risolto in un altro modo e non posti il codice, pensaci...
 
Ho risolto semplicemente utilizzando la funzione chan:
Codice:
 chan("$theTime");

Che tra l'altro è la stessa cosa di print sopra.. :
Codice:
sub chan() {
	my $mes = shift;
	print $sock "PRIVMSG $chan :$mes\r\n";
}
 
Stato
Discussione chiusa ad ulteriori risposte.