IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Tableau associatif dynamique possible ?


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Tableau associatif dynamique possible ?
    Bonjour,

    voilà en ce moment je code un bot en Perl pour de l'IRC. Mais pour une commande j'ai besoin d'un tableau associatif qui gagne une ligne à chaque fois que la commande est exécutée...
    Cette commande prend en clé ' $nick ' (le nick de l'user qui tape la commande) et en valeur un nombre par défaut (par exemple 10).

    Est-il possible (et si oui comment ?) de créer un tableau associatif qui gagne une ligne à chaque fois que la commande est éxécutée ?

    Je vous remercie d'avance

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tous les tableaux associatifs sont "dynamiques" par défaut (sauf si tu gèles leurs clés avec Hash::Util::lock_keys()), il suffit d'affecter à la nouvelle clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{$newkey} = $newvalue;
    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Hmmm ok, mais avant d'ajouter cette ligne je dois tout de même créer le tableau non ?

    En fait dans mon code, ce tableau se construit après un 'if' normalement. Et je penses que le problème vient de là en fait, car il doit se récréer à chaque fois que les conditions sont remplies non ?

    Le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ($test eq "!test") {
      my $value = 10;
      my %hash = ($nick, $value);
    }

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Je viens de me rendre compte de l'énormité de mon post précédent Autant pour moi j'étais dans la brume encore :p

    J'ai modifié le code qui marche mais m'indique une erreur (qui n'influe pas sur le résultat mais qui fait pas très 'propre'):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %hash = (my $newkey, my $newvalue);
     
    if ($test eq "!test") {
      $newvalue = 10;
      $hash{my $newkey} = $newvalue;
    }
    Il m'indique que j'utilise des variables non initialisées ($newkey et $newvalue je pense). Y a-t-il moyen de supprimer cette ligne 'avertissement' ou non ?

    L'erreur:
    'Use of uninitialized value in ligne assignment '
    EDIT: Décidemment aujourd'hui je suis vraiment à l'ouest :/ J'ai réglé le problème ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %hash;
     
    if ($test eq "!test") {
      my $newvalue = 10;
      $hash{ my $newkey} = $newvalue;
    }
    Merci de l'aide Jedai en tout cas

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Kyp_Durron Voir le message
    EDIT: Décidemment aujourd'hui je suis vraiment à l'ouest :/ J'ai réglé le problème ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %hash;
     
    if ($test eq "!test") {
      my $newvalue = 10;
      $hash{ my $newkey} = $newvalue;
    }
    Merci de l'aide Jedai en tout cas
    De rien, mais ton dernier code a encore un problème : $newkey n'est pas initialisé, ce qui signifie que tu associe $newvalue à la chaine vide, je ne suis pas sûr que ce soit ce que tu veux vraiment faire ?

    --
    Jedaï

  6. #6
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Mais, quel résultat cherches-tu à obtenir, au juste ? Parce que j'ai beau relire tes explications, je ne comprends pas bien. Tu es au courant que les clés, dans un tableau associatif, sont uniques, n'est-ce pas ? Par conséquent, il n'y aura pas une nouvelle entrée chaque fois que ta commande sera utilisée, mais uniquement la première fois que ta commande sera entrée par un utilisateur donné. Si un utilisateur utilise plusieurs fois la commande, ça ne fera en tout et pour tout qu'une seule entrée pour lui, une entrée maximum par utilisateur. Est-ce bien le résultat que tu veux obtenir ?
    There's nothing like $HOME!

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Oui oui je veux une seule entrée pour chaque nick en fait donc c'est bien ça oui Comme c'est pour une sorte de jeu de cartes, je sélectionne les joueurs ainsi.

    Jedai > oui en effet, j'ai attribué le nick à $newkey en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    my %hash;
     
    if ($test eq "!test") {
      my $newvalue = 10;
      my $newkey = $nick;
      $hash{$newkey} = $newvalue;
    }
    Ca marche très bien maintenant

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Kyp_Durron Voir le message
    Oui oui je veux une seule entrée pour chaque nick en fait donc c'est bien ça oui Comme c'est pour une sorte de jeu de cartes, je sélectionne les joueurs ainsi.

    Jedai > oui en effet, j'ai attribué le nick à $newkey en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    my %hash;
     
    if ($test eq "!test") {
      my $newvalue = 10;
      my $newkey = $nick;
      $hash{$newkey} = $newvalue;
    }
    Ca marche très bien maintenant
    Tant mieux ! Mais tu n'as pas besoin de créer tant de variables temporaires, ça obscurcit l'intention plus qu'autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my %hash;
     
    if ($test eq "!test") {
      $hash{$nick} = 10;
    }
    --
    Jedaï

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Certes certes Je suis parfois excessifs dans les variables mais certaines vont être ré-utilisées derrière...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.1] Créer un tableau associatif dynamique
    Par rolls dans le forum Langage
    Réponses: 9
    Dernier message: 04/05/2012, 11h10
  2. [MySQL] Tableau associatif dynamique
    Par babacan dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/03/2012, 16h53
  3. Tableau associatif dynamique
    Par babacan dans le forum Langage
    Réponses: 12
    Dernier message: 29/03/2012, 16h42
  4. [Tableaux] Tableau associatif dynamique
    Par krapno dans le forum Langage
    Réponses: 5
    Dernier message: 27/08/2007, 13h54
  5. [Tableaux] Tableau associatif dynamique
    Par popeye82 dans le forum Langage
    Réponses: 5
    Dernier message: 09/02/2006, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo