sub merge { my %merged; for (@_) { while (my ($k, $v) = each %$_) { push @{$merged{$k}}, $v; } } %merged; }