[perl] probleme tableau de hachage
die
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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
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
Configuration: Linux Firefox 2.0.0.17
7 réponses
-
-
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"
-
-
Salut : voila le code source complet
http://fr.pastebin.ca/1270415
Et tu avait raison, j'avais oublié pour les doubles quotes. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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?! -
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. -
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.