Given two (or more) hashes, where each value is a reference to an array how can we merge them?

Two solutions.

## Merge including duplicate values

In the first one we just merge the arrays. Duplicate values remain.

examples/merge_hashes_of_arrays.pl

```use 5.010;
use strict;
use warnings;
use Data::Dump qw(dump);

my %semesterOne = (
Jack    => [1, 1, 2, 7],
Antonie => [2, 1],
);

my %semesterTwo = (
Jack    => [1, 3],
Antonie => [2, 4],
Alex    => [2, 3, 4],
);

my %merged;
for my \$hash (\%semesterOne, \%semesterTwo) {
for my \$k (keys %\$hash) {
push @{ \$merged{\$k} },  @{ \$hash->{\$k} };
}
}

say dump \%merged;

```

examples/merge_hashes_of_arrays.txt

```{ Alex => [2, 3, 4], Antonie => [2, 1, 2, 4], Jack => [1, 1, 2, 7, 1, 3] }
```

## Merge excluding value duplication - ensuring values are unique

In the second we only keep distinct values withine each array.

examples/merge_hashes_of_arrays_uniq.pl

```use 5.010;
use strict;
use warnings;
use Data::Dump qw(dump);
use List::MoreUtils qw(uniq);

my %semesterOne = (
Jack    => [1, 1, 2, 7],
Antonie => [2, 1],
);

my %semesterTwo = (
Jack    => [1, 3],
Antonie => [2, 4],
Alex    => [2, 3, 4],
);

my %merged;
for my \$hash (\%semesterOne, \%semesterTwo) {
for my \$k (keys %\$hash) {
@{ \$merged{\$k} } = uniq ( @{ \$merged{\$k} }, @{ \$hash->{\$k} } );
}
}

say dump \%merged;

```

As you can see if one of the original arrays had a duplicate value (Jack in semester one had two 1-s) those will be also subject for the unification.

examples/merge_hashes_of_arrays_uniq.txt

```{ Alex => [2, 3, 4], Antonie => [2, 1, 4], Jack => [1, 2, 7, 3] }
```