[perl] probleme tableau de hachage

die -  
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
Configuration: Linux
Firefox 2.0.0.17

7 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. die
     
    Salut : voila le code source complet
    http://fr.pastebin.ca/1270415
    Et tu avait raison, j'avais oublié pour les doubles quotes.
    0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  5. die
     
    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
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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