8
votes

Comment créer un hachage de hachage dans Perl?

Basé sur ma compréhension actuelle des hachages dans Perl, je m'attendrais à ce que ce code imprime "Hello World". Cela n'empêche plus rien. XXX

Je suppose qu'un hachage est comme un tableau, alors pourquoi ne puis-je pas faire un hachage contenant un autre?


1 commentaires

Le court et sucré de la raison pour laquelle cela ne fonctionne pas, c'est que, essentiellement, un hachage ou une matrice ne peut contenir que des valeurs scalaires et les hachages ne sont pas des scalaires. Cependant, les références de hachage sont. :) Les réponses ci-dessous ont de bons liens sur pourquoi c'est.


5 Réponses :


6
votes
  1. Vous devez toujours utiliser "Utiliser strict;" dans votre programme.

  2. Utilisez des références et des hachages anonymes.

    xxx

    {% b} crée une référence à la copie de hachage < Code>% b . Vous avez besoin de copier ici parce que vous le videz plus tard.


2 commentaires

@Mike: L'utilisation de strictures devrait être standard , pas le cas particulier.


@ether je me rends compte que maintenant, j'apprends Perl et je viens de découvrir strict



6
votes

Les hachages des hachages sont difficiles à obtenir la première fois. Dans ce cas,

$a{1} = { %b };
...
$a{2} = { %b };


1 commentaires

Perldoc Perllol Est-ce que toutes les tableaux sont tous, tout le temps, je pense. Perldoc Perldsc passe dans des scénarios plus compliqués (et comprend des hachages). Je recommande également fortement Perldoc Perlrefut pour toute personne nouvelle aux références à Perl.



1
votes

Perl aime aplatir vos structures de données. C'est souvent une bonne chose ... Par exemple, (@ options, "Une autre option", "Encore une autre") "> finit comme une liste.

Si vous voulez vraiment avoir une structure à l'intérieur Une autre, la structure interne doit être une référence. Comme: P>

$a{1} = \%b;   


0 commentaires

2
votes

Mike, Alexandr est la bonne réponse.

Aussi un pourboire. Si vous venez d'apprendre que Haquet Perl a un module appelé Data :: Dumper pouvant pondrer vos structures de données pour vous, ce qui est vraiment pratique lorsque vous souhaitez vérifier les valeurs que vos structures de données ont. P>

$VAR1 = {
          '1' => {
                   'str' => 'hello'
                 },
          '2' => {
                   'str' => 'world'
                 }
        };


0 commentaires

4
votes

Réponse courte: Les touches de hachage ne peuvent être associées qu'à un scalaire, pas un hachage. Pour faire ce que vous voulez, vous devez utiliser des références.

plutôt que re-hachage (heh) Comment créer des structures de données multi-niveaux, je vous suggère de lire Perlrefut. Perlref est plus complet, mais c'est un peu écrasant au début.


2 commentaires

Merci! J'ai oublié Perldsc. Je devais regarder Perlref pour vous rappeler que Perlrefut existait. :-) Je pense que je devrais me familiariser avec les documents.


@Davidwall Examiner les documents est toujours bon, mais la section des tutoriels en particulier est facile à oublier mais à ne pas manquer. Je me souviens surtout avoir aimé perlre , perlrefut , perldsc , perlopentut , perltoot (peut-être Celui-ci est obsolète ou hors de temps avec les meilleures pratiques actuelles concernant OO en Perl - pas sûr) et perlstyle .