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


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut Nom de variable dynamique
    Bonjour,

    J'ai lu cet ancien topic:
    http://www.developpez.net/forums/d24...ble-dynamique/

    Mais il ne repond pas tout a fait a ma question.

    Je souhaite construire un nom de variable avec une partie en texte.
    Exemple:

    print $proc9->{LOCK}."\n";
    Affiche bien ce que je veux mais maintenant quand j'essaie:

    my $test = 9;
    print ${"proc".$test}->{LOCK}."\n";

    La, ça me met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't use string ("proc9") as a SCALAR ref while "strict refs" in use at scriptcal.pl line 109.
    Avez vous une idée?
    Merci,
    Benjamin.

  2. #2
    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
    Comme précisé dans le vieux topic, il faut utiliser no strict 'vars' pour pouvoir utiliser des variables dynamiques.
    Mais comme le montre ce même topic, il y a d'autres solutions que les variables dynamiques. Que cherches tu à faire exactement ?

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Bonjour,
    Tout d'abord, merci pour votre réponse.
    Je précise que javai mis "no strict 'vars'; " lors de mes test.

    Ce que je souhaite fair:
    En fait, je vais avoir un tableau qui contiendra une liste d'id de mes processus.
    Ex: @tab=(1,2,3,4,5,6,7,8,9)

    et je travail sur des objet du genre:
    my $proc1 = new Personne( "1", "alias1", \@pere, \@fils, "unlock", "unknown");
    ...
    my $proc9 = new Personne( "9", "alias9", \@pere, \@fils, "unlock", "unknown");

    Et je voudrai faire un:
    foreach $i (@tab) {
    {
    print ${"proc".$i}->{LOCK}."\n";
    }

    Voila donc ou je voudrai en venir.

    Merci,
    Benjamin.

    Au cas ou, voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #!/usr/bin/perl -w
    use strict; 
    no strict 'vars'; 
     
    package Personne;
     
    my @listJob = ();
     
    sub new {
       #my $self={};
       my ($class, $ID_PROCESS, $ALIAS, $PERE_PROCESS, $FILS_PROCESS, $LOCK, $TYPE) = @_;
       my $this = {};
       bless($this, $class);
     
     
       $this->{ID_PROCESS} = $ID_PROCESS;
       $this->{ALIAS} = $ALIAS;
       $this->{PERE_PROCESS} = $PERE_PROCESS;
       $this->{FILS_PROCESS} = $FILS_PROCESS;
       $this->{LOCK} = $LOCK;
     
      print "ID : $ID_PROCESS\n";
      print "ALIAS : $ALIAS\n";
      print "PERE_PROCESS : ";
      foreach my $pere ( @{$PERE_PROCESS} ) {
        print " $pere";
      }
      print "\n";
      print "FILS_PROCESS : ";
      foreach my $fils ( @{$FILS_PROCESS} ) {
        print " $fils";
      }
      print "\n";
      print "LOCK : $LOCK\n";
      print "TYPE : $TYPE\n";
     
       push(@listJob,$ID_PROCESS);
     
     
      print "\n\n";
     
     
       return $this;
       }
     
     
    sub getID {
    	my ($this) = @_;
    	return $this->{ID_PROCESS};
    }
    sub getAlias {
    	my ($this) = @_;
    	return $this->{ALIAS};
    }
    sub getPere {
    	my ($this) = @_;
    	return $this->{PERE_PROCESS};
    }
    sub getFils {
    	my ($this) = @_;
    	return $this->{FILS_PROCESS};
    }
    sub getLock {
    	my ($this) = @_;
    	return $this->{LOCK};
    }
    1;
     
    my @pere = ("NULL");
    my @fils = ("4", "5");
    my $proc1 = new Personne( "1", "alias1", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("NULL");
    my @fils = ("6");
    my $proc2 = new Personne( "2", "alias2", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("NULL");
    my @fils = ("8", "9");
    my $proc3 = new Personne( "3", "alias3", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("1");
    my @fils = ("7");
    my $proc4 = new Personne( "4", "alias4", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("1");
    my @fils = ("7");
    my $proc5 = new Personne( "5", "alias5", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("2");
    my @fils = ("8");
    my $proc6 = new Personne( "6", "alias6", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("4", "5");
    my @fils = ("8");
    my $proc7 = new Personne( "7", "alias7", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("7", "5", "6", "3");
    my @fils = ("NULL");
    my $proc8 = new Personne( "8", "alias8", \@pere, \@fils, "unlock", "unknown");
     
    my @pere = ("3");
    my @fils = ("NULL");
    my $proc9 = new Personne( "9", "alias9", \@pere, \@fils, "unlock", "unknown");
     
     
    print "listJob : @listJob\n";
     
     
    my $test = 9;
    print ${"proc".$test}->{LOCK}."\n";
     
     
    print $proc9->{LOCK}."\n";

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Ok, j'ai trouvé une solution plus propre.
    EN fait, maintenant, je fais un tableau qui contient des tableaux.

    C'est mieux

    Merci a vous,
    Benjamin.

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

Discussions similaires

  1. [JSTL] nom de variable "dynamique"
    Par gmonta31 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2006, 14h31
  2. Nom de variable dynamique
    Par mavina dans le forum Linux
    Réponses: 7
    Dernier message: 26/04/2006, 21h48
  3. Réponses: 4
    Dernier message: 13/09/2005, 12h50
  4. Noms de Variables dynamiques
    Par horec dans le forum Langage
    Réponses: 7
    Dernier message: 22/07/2005, 17h47
  5. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 12h44

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