0

Donc, j'ai un hachage% HoHoA. Chaque clé de hachage de niveau supérieur possède une clé de hachage de second niveau en tant que valeur. Chaque hachage de second niveau a des tableaux de tableaux en tant que valeurs.Perl: taille du tableau dans un hachage, dans un autre hachage

Dans le débogueur de Perl, il ressemble à ceci:

0 'Top_key_1' 
1 HASH(0x...) 
    'Second_Key_1' => ARRAY(0x...) 
    0 'string 1' 
    1 'string 2' 
    'Second_Key_2' => ARRAY(0x...) 
    0 ARRAY(0x...) 
     0 'string 3' 
     1 'string 4' 
     2 'string 5' 
    1 ARRAY(0x...) 
     0 'string 6' 
     1 'string 7' 
2 'Top_key_2' 

J'essaie d'obtenir la taille de deux tableaux de chaque suite. Dans l'exemple ci-dessus , Second_Key_2 a deux tableaux, l'un 0e est de taille 3.

my $count1 = $#{$HoHoA{$top_key}{$second_key}[0]}+1; 
my $count2 = $#{$HoHoA{$top_key}{$second_key}[1]}+1; 

et

my $count1 = @{$HoHoA{$group}{$suite}[0]}; 
my $count2 = @{$HoHoA{$group}{$suite}[1]}; 

Je reçois un message d'erreur comme: Impossible d'utiliser la chaîne ("string 3 ") comme ARRAY ref pendant que" strict refs "est en cours d'utilisation

Pourquoi est-ce que j'obtiens ce message d'erreur, et que dois-je faire à la place?

+0

Avez-vous lu [perldoc perldsc] (http://perldoc.perl.org/perldsc.html) et [perldoc perllol] (http://perldoc.perl.org/perllol.html)? Certaines structures très similaires sont disséquées en détail là-bas. – Ether

+0

Aussi http://perlmonks.org/?node=References+quick+reference - bien que vous sembliez avoir l'idée, mais ayez une légère différence entre vos données et ce à quoi vous semblez vous attendre. – ysth

Répondre

1

$HoHoA{$group}{$suite}[0] n'est pas un arrayref; c'est une chaîne, donc l'erreur. Peut-être que vous avez besoin de déboguer le code qui construit votre structure de données.

+0

Bien que '$ HoHoA {$ group} {$ suite} [1]' soit un arrayref. – ysth

1

Exécutez-le sous le débogueur et videz récursivement une structure de données, ou pointez-y, avec la commande x.

Vous pouvez le faire par programmation avec le module Dumpvalue, mais c'est beaucoup moins pratique.

Je souhaite que les gens ne continueraient pas à penser que j'ai écrit perllol comme une blague. ☺

0

On dirait que vous êtes allé un niveau trop profond. Le code ci-dessous devrait vous obtenir ce que vous voulez

my $count1 = @{$HoHoA{$group}{$suite}}; 

Vous pouvez peut également utiliser des Videur de données pour voir la Structure de votre objet pour vous assurer travaillez sur le format de données d'écriture. use Données :: Dumper; imprimer Dumper ($ HoHoA);