[perl] probleme tableau de hachage

Fermé
die - 29 nov. 2008 à 16:56
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 29 nov. 2008 à 21:06
Bonjour, je code un bot irc en perl, je ne suis pas très fort en table de hachage et la justement j'essaye mais apperemment ca ne marche pas.

Voila mon code :

sub on_public
{
my ($conn, $event) = @_;
my %salut();
my $text = $event->{'args'}[0];
print "<" . $event->{'nick'} . ">\t| $text\n";
if ($text eq 'salut $nick'||'yop $nick'||'slt $nick'||'plop $nick')
{
if($salut{event->{'nick'}} <= 4)
{
sleep(3);
$conn->privmsg($channel, 'Salut '. $event->{'nick'} .' !')
$salut{event->{'nick'}}++;
}
else
{
sleep(5);
$conn->privmsg($channel, 'Euh.... T\'en a pas un peu marre la ?')
}

}


} # Fin on_public

C'est %salut qui plante
et voila ce que me dit la console :

die@laptop:~/Programmation/Perl$ ./test.pl
syntax error at ./remy.pl line 62, near "%salut("
Can't use bareword ("event") as a HASH ref while "strict refs" in use at ./test.pl line 67.

Je ne comprends rien ^^ pouvez vous m'aidez ?
Merci d'avance

7 réponses

UP
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 nov. 2008 à 19:22
Salut,

Ben, je pense que tu dois afficher tout le code pour comprendre.

Sinon, cette expression je pense qu'elle ne sera jamais vraie
$text eq 'salut $nick'
Quand on utilise les apostrophes il n'y a pas d'interpolation des variables ce qui veut dire que $nick sera lu littéralement et je ne sais pas si c'est ça que tu veux.
Si tu veux que $text soit comparé à salut + le contenu de la variable scalaire $nick alors tu dois utiliser les guillements qui perment l'interpolation des varaibles
$text eq "salut $nick"
0
UP
0
Salut : voila le code source complet
http://fr.pastebin.ca/1270415
Et tu avait raison, j'avais oublié pour les doubles quotes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 nov. 2008 à 20:12
Salut,

my ($conn, $event) = @_;

Pourqoi ?!
Je vois que tu appelles les sous-programmes sans argument.

Je vois que tu crés un objet $conn.
Alors à l'intérieur de sous-programmes, $conn c'est quoi?!
0
Salut, $conn et tout sont des objets gérés par une libraire que j'ai téléchargé (NET::IRC), alors ce qu'il y a deddans... je ne sais pas, j'utilise cette doc pour avoir l'utilisation de la librairie : https://www.squalenet.net/fr/pc/articles/ecrire-un-bot-irc-en-perl-part1.php5
Sinon j'ai eu l'idée de remplacer les event->{'nick'} par une scalaire $interlocuteur, ça donne ça:
http://pastebin.com/m499c13b6
Et maintenant il me fait une erreur ici :
if($salut{$interlocuteur} <= 4)
apperement il n'aime pas le "<="
Use of uninitialized value in numeric le (<=) at ./Programmation/Perl/remy.pl line 68.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 nov. 2008 à 21:06
Re,

Pour tester ton script tu as besoin d'au moins un interlocuteur pour qu'il te réponds.
Ta variable $interlocuteur a besoin de ça.
0