[PERL] Nom de Variable Dynamique

Nom de Variable Dynamique [PERL] - Perl - Programmation

Marsh Posté le 21-11-2006 à 14:30:16    

Bonjour,
 
Je suis une débutante en langage PERL.
Je souhaiterai savoir comment avec un incrément $i créer des noms de variables dynamiquement.
Je me perds dans la syntaxe.
 
Ce serait pour utiliser des noms de tableaux de hashage % différents en référence \ dans un tableau @.
Je ne sais pas si je suis claire.
Merci d'avance.

Reply

Marsh Posté le 21-11-2006 à 14:30:16   

Reply

Marsh Posté le 21-11-2006 à 17:02:01    

J'ai pas trop compris la question, mais il ne faut pas créer de noms de variables dynamiquement. En général, on utilise des tables de hachage à la place.
 
Peux-tu préciser la question et nous donner ton bout de code si tu as déjà un début ?


---------------
TriScale innov
Reply

Marsh Posté le 21-11-2006 à 17:22:21    

pareil pas tout compris.
Mais si tu utilises des reférences sur tes tableaux de hashage, je vois pas pourquoi tu aurais besoin de les nommer :??:
Exemple:

Code :
  1. my @tableau = (
  2. {'cle1'=>12, 'cle2'=>3, 'cle3'=>5},
  3. {'cle1'=>20, 'cle2'=>5, 'cle3'=>4},
  4. {'cle1'=>10, 'cle2'=>4, 'cle3'=>3},
  5. );
  6. my %hash = ( 'cle1'=>10, 'cle2'=>4, 'cle3'=>3);
  7. push @tab, \\%hash;

Message cité 1 fois
Message édité par anapajari le 21-11-2006 à 17:22:42
Reply

Marsh Posté le 21-11-2006 à 18:06:58    

anapajari a écrit :

pareil pas tout compris.
Mais si tu utilises des reférences sur tes tableaux de hashage, je vois pas pourquoi tu aurais besoin de les nommer :??:
Exemple:

Code :
  1. my @tableau = (
  2. {'cle1'=>12, 'cle2'=>3, 'cle3'=>5},
  3. {'cle1'=>20, 'cle2'=>5, 'cle3'=>4},
  4. {'cle1'=>10, 'cle2'=>4, 'cle3'=>3},
  5. );
  6. my %hash = ( 'cle1'=>10, 'cle2'=>4, 'cle3'=>3);
  7. push @tab, \\%hash;



 
Je traite un fichier texte.
Je lis une ligne structurée (qui correspond aux valeurs de mes clés de hashage)
J'ai çà dans une boucle while avec un index $i que j'utilise pour alimenter le tableau @tab

Code :
  1. $i = 0;
  2. while (<FDATA> )
  3. {
  4. my %hash = ( 'cle1'=>10, 'cle2'=>4, 'cle3'=>3);
  5. push @tab, \\%hash;
  6. $i++;
  7. }


 
Pb quand je souhaite utiliser les indices pour consulter le tableau après.
 
$tab[0]->{cle1} me renvoit tjs la valeur pour le dernier indice $i.
 
Merci d'avance de votre aide.

Reply

Marsh Posté le 21-11-2006 à 19:07:51    

et si tu fais :

Code :
  1. while (<DATA> )
  2. {
  3.   push @tab, {'cle1'=>$val1, 'cle2'=>$val2};
  4. }


 
ca marche pas ?


---------------
TriScale innov
Reply

Marsh Posté le 21-11-2006 à 19:25:40    

ça devrait marcher quand même ... j'en deduis  que c'est pas ton "vrai" code et qu'il doit y avoir une boulette dans celui-ci!

Reply

Marsh Posté le 22-11-2006 à 10:53:20    

anapajari a écrit :

ça devrait marcher quand même ... j'en deduis  que c'est pas ton "vrai" code et qu'il doit y avoir une boulette dans celui-ci!

Ah tiens, je ne savais pas que la hash locale était recréée à chaque tour de boucle. Intuitivement j'aurais dit que c'était toujours la même hash qui était utilisée, donc que la référence ne changeait jamais... Merci pour les éclaircissements :jap:


---------------
TriScale innov
Reply

Marsh Posté le 22-11-2006 à 11:08:04    

En fait c'est logique puisque la portée de %hash est limité au while.
Par contre si %hash est déclarée hors du while, ça peut pas marcher.

Reply

Sujets relatifs:

Leave a Replay

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