my @a = {\@array1, \@array2, \@array3};
Ce qui précède est un tableau avec un seul élément -> a hachage contenant:
{ ''.\@array1 => \@array2, ''.\@array3 => undef }
Parce que, comme une clé dans la table de hachage, Perl contraint la référence à @array1
dans une chaîne. Et Perl permet d'affecter une référence de hachage scalaire à un tableau, car il est "compris" que vous voulez un tableau dont le premier élément est le scalaire que vous lui avez assigné.
Vous créez un tableau de tableaux, comme ceci:
my @a = (\@array1, \@array2, \@array3);
Et puis dans votre fonction que vous les déballer, comme ceci:
sub func {
my $ref = shift;
foreach my $arr (@$ref) {
my @list_of_values = @$arr;
}
}
ou une variante de celui-ci, comme disent une carte serait l'expression la plus facile:
my @list_of_entries = map { @$_ } @$ref;
Dans votre exemple, @c
comme une liste de adresses est simplement la même chose qu'un @a
correctement construit.
Je ne pense pas '@a = {\ @ array1 , \ @ array2, \ @ array3} 'fait ce que vous pensez qu'il fait. – mob
Tant de malentendus dans si peu de lignes de code. –
Perl a des références, pas des pointeurs (comme C). Vous ne pouvez pas obtenir l'adresse d'une variable et vous n'en avez pas besoin. (Pour tout hacker Perl suffisamment expérimenté qui se sent obligé de souligner que ce n'est pas 100% précis: ne le faites pas, l'OP est déjà assez confus.) –