Mi scuso per il topic fuorviante, ma non sapevo come definirlo. :)
Dopo aver fatto decine di esperimenti e prove, ed aver "licenziato" il mio
bot irc come funzionante, mi sono accorto che funzionava come volava lui, e
non sempre, quindi dopo altre prove ed esperimenti, sono ripartito da 0
sperando di non commettere gli stessi errori.
Ricordo che lo scopo di questo bot, è di gestire gli accessi ad un canale
IRC. Quindi se chi entra è abilitato entra, altrimenti viene cacciato fuori.
Il codice risultante dai miei "salti mortali programmatori", sostanzialmente
funziona ma la parte delegata a cancellare un utente dal database ha un
problema.
Se si cerca di cancellare un utente non presente, segnala che l'utente non
esiste e tira dritto per la sua strada, se esiste lo cancella regolarmente.
Il difetto è che se tento di cancellare un utente che non esiste, tutto
funziona perfettamente, anche ripetendo più volte la cosa. Se cancello un
utente che era nel database un'altra volta, anche non consecutivamente lo
script entra in un loop con questo errore:
Use of uninitialized value in string eq at
killer2.pl line 135, <$fh> line
4.
questa è la parte di codice interessata (abbiate pietà che sono
autodidatta):
if ($answer =~ /:(.*)!.+?(PRIVMSG)(.+?)\s:\!del\s(.*)/) {
$adm = $1;
$utente = $4;
chop $utente;
&checkadm($1);
if ($trovato eq $1) {
&checkDB($4);
if ($trovato2 eq $utente) {
my $index = 0;
$index++ until $database[$index] eq $utente;
# <<----<<<< riga 135
splice(@database, $index, 1);
untie @database;
tie @database, 'Tie::File', 'KillerBot.dat';
print $server "PRIVMSG $chan : $utente
rimosso dal Database \r\n";
}
else {
print $server "PRIVMSG $chan : $utente non risulta
presente nel Database\r\n";
}
}
}
io non riesco a capire dove sia l'inghippo, perchè per dare errore a quella
riga, il confronto 2 righe sopra ( if ($trovato2 eq $utente) {) deve aver
dato esito positivo (e giustifica il loop, dato che nel database non esiste
più $utente), e non ha molto senso visto che $utente viene regolarmente
cancellato.
per semplificare, dato che io a spiegarmi sono peggio che a programmare...
ho un database di nomi:
pippo
pluto
paperino
...
...
eseguo !del topolino: ricevo messaggio di utente non presente
eseguo !del pluto: pluto viene rimosso
eseguo !del pluto ricevo l'errore indicato sopra...
la sub "checkDB()" è questa:
sub checkDB {
$trovato2;
foreach ( @database )
{
if( /$utente/ ) { $trovato2 = $_; last }
}
return $trovato2;
}
consigli?
--
Fri(END), Boyfri(END), Girlfri(END), Bestfri(END). Everything has an END
except...Fam(ILY)! It Has 3 Letters that say I LOVE YOU