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 :

nom de variable dynamique (dépendant d'un tableau)


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut nom de variable dynamique (dépendant d'un tableau)
    Bonjour,

    Voici mon problème, j'ai un tableau @names comprenant des noms. Et je voudrais que ces noms deviennent des variables :

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @names = {toto, tata}
    $toto = 0;
    foreach (@names)
    {
       $$_ = 1;
       my $v = $$_;
       print $_."\t".$toto."\t".$$_."\t".$test."\n";
       $$_++;
    }
    => le résultat du print est bon par contre si j'ai "PRIMER_PRODUCT_SIZE_RANGE" dans mon tableau et que je fait exactement la même méthode (avec du code entre en plus qui n'influence pas), je me retrouve avec une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't use string ("PRIMER_PRODUCT_SIZE_RANGE") as a SCALAR ref while "strict refs" in use at test.pl line 553.
    En lisant quelques commentaires sur le net, ceci peut venir du fait d'avoir 2 $, hors ici c'est nomal ....
    Bref mon but est d'avoir des variables dont le noms sera à chaque fois la case du tableau et à priori la méthode est mauvaise, donc si vous avez une idée je suis preneuse ^^

    Merci pour votre attention

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Tu essaies d'utiliser des références symboliques, ce qui est interdit avec "use strict" (seules les références "dures" sont autorisées).

    Si tu veux vraiment utiliser des références symboliques, tu mets "no strict ref" juste avant son utilisation et tu réactives strict ref juste après. Par ailleurs, les références symboliques ne fonctionnent qu'avec des variables globales (déclarées avec our).

    Mais je vois d'autre problèmes dans ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (@names)
    {
       $$_ = 1;
    Le foreach met chaque élément du tableau @names dans la variable spéciale $_, et tu t'empresses d'écraser son contenu en entrant dans la boucle. Je doute que ce soit ce que tu cherches vraiment à faire.

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Merci pour ta réponse je vais tester le strict ^^ je me suis doutée que ça pouvait venir de là mais ton indication sur l'inactivation et la réactivation est très pratique.
    Sinon si je peux écraser à chaque mouvement de boucle puisque à chaque boucle de foreach, mon traitement est sauvegarder dans un autre tableau ^^

    Merci encore

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    J'ai encore des erreurs mais qui ne sont pas du à ceci je n'ai plus qu'à regarder ^^ Merci encore

    ps : no strict 'refs'

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Effectivement, no strict 'refs'.

    Mais j'insiste que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (@names)
    {
       $$_ = 1;
    me paraît être une très mauvaise idée.

    De plus

    ne fait sans doute pas ce que tu penses, car @names conient alors un seul élément, à savoir une référence à un hash anonyme ayant toto comme unique clé et tata comme seule valeur. Tu veux sans doute faire quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @names = qw /toto tata/;

  6. #6
    Membre chevronné
    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
    Par défaut
    Et de toute façon, sauf cas particuliers dont je n'ai pas connaissance et qui relèveraient de toute façon de la Magie Noire, le nommage dynamique des variables est inutile. Les tableaux associatifs permettent d'obtenir le même résultat, sans les inconvénients.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/12/2011, 14h34
  2. Nom de variable dynamique
    Par mavina dans le forum Linux
    Réponses: 7
    Dernier message: 26/04/2006, 20h48
  3. Réponses: 4
    Dernier message: 13/09/2005, 11h50
  4. Noms de Variables dynamiques
    Par horec dans le forum Langage
    Réponses: 7
    Dernier message: 22/07/2005, 16h47
  5. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44

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