Próbuję połączyć dwa hashe, które zawierają jedną lub więcej tablic przy użyciu Hash::Merge
. Na przykład:Scal hashe z tablicami z 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);
Daje wyjście:
hLeft: { a => [{ aa => 1 }, 3, { bb => 2 }] }
hRight: { a => [{ bb => 2 }, { aa => 1 }, 3] }
Desired: { a => [{ aa => 1, bb => 2 }, 3] }
Jak mogę uzyskać poprawny wynik używając Hash::Merge
?
Dzięki Miller! Z twojego kodu widzę, że powinienem użyć 'scalania' zamiast' _merge_hashes'. Lubię twoją uproszczoną wersję znacznie bardziej niż moją :) –
Prawidłowo, Argumenty dla _merge_hash muszą być hashami. Sprawdzałeś, czy są to referencje, ale błąd zostałby rzucony, gdyby tablica utknęła w twoich tablicach. Ponadto użycie funkcji scalania uprościło logikę, ponieważ umożliwiło modułowi obsługę typów danych. NP za pomoc i dzięki za inspirację do znalezienia nowego narzędzia. – Miller