my %joined_FS; my %outer_keys; for my $var (($VAR1, $VAR2)) { if (ref $var eq "HASH") { while (my($key, $value) = each %$VAR1) { $outer_keys{$key} = $value; } } elsif (ref $var eq "ARRAY") { for my $href (@$var) { my @unq_keys = keys %$href; for my $key (@unq_keys) { if (!exists $outer_keys{$key}) { $outer_keys{$key} = $href->{$key}; } else { while (my($k, $v) = each %{$href->{$key}}) { $outer_keys{$key}->{$k} = $v; } } } } } } print Dumper \%outer_keys;