Bonjour,
J'ai déjà ouvert un sujet sur les tableaux, mais le problème ici est légèrement différent...
La question est comment modifier un tableau qui est un element d'une classe ?
Je m'explique :
Soit une classe avec un constructeur. Un des éléments de la classes est un tableau double :
Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 sub new { my ($classe, $fichier) = @_; my @tabParam; $tabParam[0][0] = 'nom'; $tabParam[0][1] = 'type'; Utils->printDoubleTable(@tabParam); my $self = { nomFichier => $fichier, listeParam => @tabParam }; Utils->printDoubleTable($self->{listeParam}); return(bless($self, $classe)); }
Et une méthode. Avec cette méthode, je souhaite rajouter des éléments dans le tableau.
Code perl : 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 print ("Debut de la fonction ajoutParam\n"); my ($this, $nomParam, $type) = @_; print ("1 \n"); Utils->printDoubleTable($this->{listeParam}); my @tabParam = $this->{listeParam}; print("test : " . $tabParam[0][1] . "\n"); print ("2 \n"); Utils->printDoubleTable(@tabParam); my $nbParam = scalar(@tabParam); print("nomParam=$nomParam - type=$type - nbParam:" . $nbParam . "\n"); $tabParam[$nbParam][0] = $nomParam; $tabParam[$nbParam][1] = $type; print ("3 \n"); Utils->printDoubleTable(@tabParam); $this->{listeParam} = @tabParam; print ("4 \n"); Utils->printDoubleTable($this->{listeParam}); print ("Fin de la fonction ajoutParam\n");
Pour information, Utils->printDoubleTable est une méthode que j'ai codé pour connaitre le contenu de mon tableau.
Quand j'appelle ajoutParam, je voudrai rajouter $this->{listeParam} deux lignes. Le problème, c'est que je ne peux pas acceder directement à $this->{listeParam}[1][0] par exemple, pour rajouter mon element.
Je peux par contre, récuperer $this->{listeParam} dans un tableau et faire l'affectation. Par contre, après, ce nouveau tableau, je ne peux plus l'affecter a $this->{listeParam}.
Les logs me donnent ca :
Notez le résultat du Utils->printDoubleTable($this->{listeParam}); qui donne le contenu du tableau au départ et plus rien apres l'affectation...
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 Debut de la fonction ajoutParam 1 Dans la fonction printDoubleTable tab[0][0]=nom tab[0][1]=type test : type 2 Dans la fonction printDoubleTable tab[0][0]=nom tab[0][1]=type nomParam=CODE - type=N - nbParam:1 3 Dans la fonction printDoubleTable tab[0][0]=nom tab[0][1]=type tab[1][0]=CODE tab[1][1]=N 4 Dans la fonction printDoubleTable Can't use string ("2") as an ARRAY ref while "strict refs" in use at class_utils.pl line 58.
Bref, pour résumer, comment est-ce que je peux modifier un tableau élément d'une classe ?
Partager