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 :
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.
Notez le résultat du Utils->printDoubleTable($this->{listeParam}); qui donne le contenu du tableau au départ et plus rien apres l'affectation...

Bref, pour résumer, comment est-ce que je peux modifier un tableau élément d'une classe ?