Bonjour à tous,
Dans mon script, j'ai un nom de variables dépendnant d'un compteur de boucle, c'est à dire:
Comment pourrais je faire celà en Perl ?Code:
1
2
3
4 while ( $i < <fin_boucle> ) { $var_$i = <valeur>; $i++; }
Nicolas.
Version imprimable
Bonjour à tous,
Dans mon script, j'ai un nom de variables dépendnant d'un compteur de boucle, c'est à dire:
Comment pourrais je faire celà en Perl ?Code:
1
2
3
4 while ( $i < <fin_boucle> ) { $var_$i = <valeur>; $i++; }
Nicolas.
Bonjour,
Pourquoi ne pas utiliser un tableau ? Ca serait quand même beaucoup plus simple...
Code:
1
2
3
4
5
6 while ( $i < <fin_boucle> ) { $var[$i] = <valeur>; $i++; }
Un tableau de liste ne pose pas de problèmes ? (ou un tableau de tableaux ce aui revient au même)
Non, c'est un des très gros avantages en Perl. Il permet de gérer avec une simplicité étonnante les structures de données complexes, à l'aide d'un mécanisme de référence vraiment bien fait. Renseigne toi dessus !
Si tu débutes en Perl, je te conseille la lecture de ce excellent cours de Sylvain Lhullier ;)
Ca ne pose pas de problème mais ça ne réalise pas ce que je souhaite, l'ajout d'une liste dans une liste provoque son applatissement..
C'est bien pour ça que je te conseille de te renseigner sur les références !Citation:
Envoyé par nicolaskarp
Un tableau en Perl ne peut contenir que des scalaires. Mais les références SONT des scalaires, donc un tableau peut contenir des références. Or une référence peut très bien se référer à un tableau, ou même à un tableau de tableau.
Donc, je réitère, renseigne toi sur les références.
€dit : et si tu es comme Saint Thomas :
Code:
1
2
3 my $ref = ["tab1ele1", ["tab2ele1", "tab2ele2"], "tab1ele2"]; print $ref->[0]; print $ref->[1][0];
La syntaxe @{...} permet de préciser qu'on a affaire à un tableau
Le code ci-dessous utilise un 'vrai' tableau de tableaux
Le deuxième affichage est juste pour bien s'assurer que ce ne sont pas des références qui sont stockées (après modification $Array1[0]=111 )Code:
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 use strict; use warnings; my @ArrayOfArray = (); my @Array1 = (1,2,3,4,5); my @Array2 = (10,20,30,40); my @Array3 = ("a",2,1); @{$ArrayOfArray[0]} = @Array1; @{$ArrayOfArray[1]} = @Array2; @{$ArrayOfArray[2]} = @Array3; my $iNbElts = scalar @ArrayOfArray; for(my $i=0; $i<$iNbElts;$i++) { print "FIRST $i : " . join (' - ', @{$ArrayOfArray[$i]}) . "\n"; } $Array1[0]=111; $iNbElts = scalar @ArrayOfArray; for(my $i=0; $i<$iNbElts;$i++) { print "SECOND $i : " . join (' - ', @{$ArrayOfArray[$i]}) . "\n"; }
Jako
et ça existe pas ${'var_'.$i} comme en PHP ?
Ca existe mais c'est à éviter... Je te reporte à cette argumentation pour mieux comprendre pourquoi c'est vraiment une très (très) mauvaise idée. PHP a certains manques qui rendent plus attrayant l'idée d'employer des références symboliques (entre autre le manque de namespaces), mais Perl n'en a pas besoin, et c'est tant mieux !! :aie:Citation:
Envoyé par knoodrake
(Le pragma "strict" interdit les références symboliques, ce qui contribue à la lente éradication de leur usage, dieu merci)
--
Jedaï
D'accord merci beaucoup.Citation:
Envoyé par Jedai