Variables de type variable, c'est possible ?

Variables de type variable, c'est possible ? - Perl - Programmation

Marsh Posté le 15-06-2004 à 00:35:28    

Je m'explique:
 
Imaginons que j'ai un tableau comme ceci:
 
@mon_tableau('soleil','lune','terre','pluton')
 
Est-ce que j'ai la possibilité de créer les variable à partir des noms contenu dans le tableau ?
 
De sorte que j'obtienne:
 
my $soleil;
my $lune;
my $terre;
my $pluton;
 
 
J'avais pensé faire une boucle de type foreach:
 
 
foreach my $planete (@tableau) {
  $$planete = $meteo{$planete};
}
 
Mais évidemment, ça ne marche pas.


Message édité par Rasthor le 15-06-2004 à 00:37:12
Reply

Marsh Posté le 15-06-2004 à 00:35:28   

Reply

Marsh Posté le 15-06-2004 à 02:58:21    

Si, ça marche. Mais ce n'est quasiment jamais la bonne solution, et c'est même interdit avec « use strict » (qui devrait être obligatoire :D). Pourquoi as-tu besoin de faire ça ?


Message édité par matafan le 15-06-2004 à 02:58:37
Reply

Marsh Posté le 15-06-2004 à 11:05:00    

oui c'est une demarche typique de débutant, mais comme le dit matafan ca n'est jamais une bonne solution (surtout en terme de vitesse, malgres ce qu'on pourrais penser!).
C'est faisable avec un eval ou en faisant un peit 'no strict', mais je te le deconseil franchement
 
la bonne solution ici serait d'utiliser un hash:

Code :
  1. foreach (@mon_tableau) {
  2.    $hash{$_} = $meteo{$_};
  3. }


 
de toutes facon TOUTES les variables de Perl sont contenues en interne dans un hash:

Code :
  1. print join("\n", keys %main::);


Reply

Marsh Posté le 15-06-2004 à 19:41:28    

matafan a écrit :

Si, ça marche. Mais ce n'est quasiment jamais la bonne solution, et c'est même interdit avec « use strict » (qui devrait être obligatoire :D).

Comme j'utilise tout le temps "use strict", c'est pour ça que  ça en marche pas. ;)
 

Citation :

Pourquoi as-tu besoin de faire ça ?


 
Je ne sais plus [:totoz]
 
Je crois que c'était pour initialiser des tables de hash afin de créer des fichiers DBM.
 
 
Mais comme c'est du PERL, il y'a plus d'une façon de faire ce que l'on veut. ;) Donc j'ai réussi à contourner le problème d'une autre manière. (mais pas propre... re-[:totoz])

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed