Je suis en train de parcourir un tableau perl mais il n'imprime que l'adresse mémoire.

my $my_session_data = {
 rows => {
    locations => [],
  }
};

my $data_row = [12, 55, '/home/pi/Desktop', undef];
push(@{$my_session_data->{rows}{locations}}, $data_row);
$data_row = [12, 36, '/home/pi/codes', undef];
push(@{$my_session_data->{rows}{locations}}, $data_row);

Ma boucle est :

foreach my $element ($my_session_data->{rows}{locations}) {
    print $element;
}

Qui imprime une adresse mémoire.

Quand je fais un dump des données.

$VAR1 = [
      [
        12,
        55,
        '/home/pi/Desktop',
        undef
      ],
      [
        12,
        55,
        '/home/pi/code',
        undef
      ],
      [
        12,
        55,
        '/home/pi/state',
        undef
      ]
    ];

J'ai également essayé foreach my $element ($my_session_data->{rows}->{locations}) et foreach my $element ($my_session_data->{rows}->{locations}[0]), ils produisent tous des adresses mémoire. Je pense que cela devrait être la même chose que de parcourir un tableau, mais ce n'est que l'impression de l'adresse mémoire. Quand je ref $my_session_data->{rows}{locations} imprime le tableau.

0
newdeveloper 21 nov. 2019 à 21:31

1 réponse

Meilleure réponse

Je parcours un tableau perl mais il n'imprime que l'adresse mémoire.
[...]
foreach my $element ($my_session_data->{rows}{locations}) {

La syntaxe de la boucle for est décrite dans perlsyn :

LABEL for VAR (LIST) BLOCK

Vous devez donc spécifier un LIST d'éléments sur lesquels vous souhaitez effectuer une itération. Une référence est interprétée comme un liste d'un seul élément, à savoir la valeur de référence elle-même. Pour parcourir la liste des éléments du tableau auxquels la référence fait référence, vous devez la déréférencer. Exemple:

$ perl -E '$ar = [1..3]; for my $item ($ar, $ar) { say $item }'
ARRAY(0x5596f7f2d780)
ARRAY(0x5596f7f2d780)
$ perl -E '$ar = [1..3]; for my $item (@$ar) { say $item }'
1
2 
3

Donc, pour votre cas d'utilisation, ce serait:

foreach my $element (@{$my_session_data->{rows}{locations}}) { ... }
1
Håkon Hægland 21 nov. 2019 à 18:57