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 :

utilisation de variable


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut utilisation de variable
    Bonjour tout le monde!
    j'aimerai recréer le nom d'une de mes variable dans le programme et l'utiliser mais je bloque un peu .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $iris_conf = "machin";
    my $osiris_conf = "bidule";
     
    my $orig = $_[0];
     
    print ${$orig."_conf"}."\n";
    Dans mon code $orig peut etre égal à iris ou à osiris. Dons j'aimerais savvoir comment faire pour que ce code affiche la bonne variable sans savoir à passer par des if else ou je sais pas quoi

  2. #2
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Pourquoi ne pas utiliser une table de hachage ?

    Par exemple pour ton code cela pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my %refs;
     
    $refs{"iris"} = "machin";
    $refs{"osiris"} = "bidule";
     
    my $orig = "iris";
     
    print  $refs{$orig}."\n";
    Ensuite tu peux tester l'existence d'une clé avec la fonction exists si jamais.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Il y a deux soucis dans ce que tu veux faire :
    - le premier est que, si cette manière de déréférencer un "texte" (un bareword) en contenu d'une variable est légale syntaxiquement, sémantiquement, elle ne peut s'appliquer qu'à des variables stockées dans la table de symboles, c'est à dire être déclarée our ou locale.
    - ensuite, il est déconseillé de déréférencer des noms de variable. L'usage du module strict, fortement conseillé, interdit d'ailleurs syntaxiquement ce déréférencement.

    En revanche, il existe une alternative très intéressante avec les tables de hashage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my %mes_variables = ( iris_conf => "machin", osiris_conf => "bidule" );
    my $orig = "iris";
    print $mes_variables{$orig."_conf"}, "\n"
    PS : grillé par beniou

  4. #4
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Citation Envoyé par Philou67430
    PS : grillé par beniou
    Mais avec des explications en plus

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Par défaut
    J'aurais bien ailmé faire cela mais ca pose des problème avec le reste du soft après... Mais finalement le problème venait du my qui a tendance à créer une nouvelle variable et donc ne permet pas de réutiliser la variable préalablament créée.

    En tout ca merci pour vos réponses

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par danathane Voir le message
    Mais finalement le problème venait du my qui a tendance à créer une nouvelle variable
    Il ne créée pas une nouvelle variable, il crée une variable "lexicalement locale". De fait, n'ayant aucune existence en dehors du bloc dans lequel elle est définie, elle n'a pas besoin d'être présente dans la table des symboles, et par conséquent, ne peut pas être utilisée dans ce mode de de-référencement, qui se base sur la table des symboles pour résoudre le lien entre le nom de la variable et son contenu.

    Voila pour la petit précision

Discussions similaires

  1. Utilisation de variables dans plusieurs classes
    Par dedeloux dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2005, 17h25
  2. Réponses: 4
    Dernier message: 11/07/2005, 11h03
  3. Réponses: 7
    Dernier message: 07/09/2004, 14h16
  4. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58
  5. Utiliser des variables d'environnements
    Par Xam335 dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/08/2004, 14h15

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