Sto cercando di unire due hash che contengono uno o più array utilizzando Hash::Merge
. Per esempio:Unisci gli hash con gli array con Hash :: Merge
use strict;
use warnings;
use feature qw(say);
use Data::Dump qw(dump);
use Hash::Merge qw(merge);
my $h1 = { a => [ { aa => 1 }, 3 ] };
my $h2 = { a => [ { bb => 2 } ] };
my $hLeft = merge($h1, $h2);
my $hRight = merge($h2, $h1);
say " hLeft: " . dump($hLeft);
say " hRight: " . dump($hRight);
my $hDesired = { a => [ { aa => 1, bb => 2 }, 3 ] };
say "Desired: " . dump($hDesired);
Questo dà uscita:
hLeft: { a => [{ aa => 1 }, 3, { bb => 2 }] }
hRight: { a => [{ bb => 2 }, { aa => 1 }, 3] }
Desired: { a => [{ aa => 1, bb => 2 }, 3] }
Come posso ottenere l'output corretto utilizzando Hash::Merge
?
Grazie Miller! Vedo dal tuo codice che avrei dovuto usare 'unire' invece di' _merge_hashes'. Mi piace la tua versione semplificata molto più della mia :) –
Corretto, gli argomenti per _merge_hashes devono essere riferimenti hash. Stavi controllando che fossero ref, ma sarebbe stato gettato un errore se un arrayref fosse entrato nei tuoi array. Inoltre, utilizzando l'unione è stata semplificata la logica poiché ha consentito al modulo di gestire la gestione del tipo di dati. NP per aiuto, e grazie per l'ispirazione per il ritiro di un nuovo strumento. – Miller