sub merge ($$) { die "Not the same references.\n" unless ref ($_ [0]) eq ref ($_ [1]); if ("" eq ref $_ [0]) { $_ [0] .= $_ [1]; } elsif ("ARRAY" eq ref $_ [0]) { push @{$_ [0]} => @{$_ [1]} } elsif ("HASH" eq ref $_ [0]) { @{$_ [0]} {keys %{$_ [1]}} = values %{$_ [1]}; } else { die "Cannot merge type ", ref $_ [0], "\n"; } }