2010-10-28 48 views
0

J'ai hash 3 dimensions et un hash 2 dimensions, et je veux fusionner le hachage bidimensionnel avec l'un des hachages intérieurs du hachage 3 dimensions, quelque chose comme ça, qui est similaire à ce que je faire pour fusionner une paire de hachages 2d:Fusionner les hachages intérieurs en Perl

my %3dhash; 
my %2dhash; 
my $key = "some string"; 
%3dhash{$key} = ($3dhash{$key}, %2dhash); 

Mais quand j'ai essayé cela ne fonctionnait pas. Que devrais-je faire?

Répondre

2

les opérations suivantes:

my %hash3d; 
my %hash2d; 
.... 
my $key = "some string"; 
$hash3d{$key} = { %{ $hash3d{$key} }, %hash2d }; 

variables en Perl ne peuvent pas commencer par un chiffre, donc je rebaptisés les variables. Le %{ ... } autour du hachage existant l'étend en tant que liste. Cette liste s'aplatit avec la liste de %hash2d. Le { ... } autour de cette liste est le constructeur de référence de hachage anonyme, qui crée une nouvelle référence de hachage qui est ensuite stockée dans $hash3d{$key}

+0

Merci! Je tapais le code de la mémoire, qui est la raison de toutes les erreurs de syntaxe. Votre solution a bien fonctionné. – DAG

+0

Les variables peuvent aussi commencer par des nombres - qu'en est-il de '$ 0 $ 1 $ 2 ... $ 9'? ;-) – ephemient

+1

@ ephemient, ce sont des variables spéciales intégrées. Vous ne pouvez pas créer de nouvelles variables commençant par un nombre. – cjm