in reply to merge two simple data structures

The only way of doing so is to accept that the parameters (or at least the first) are passed as an explicite reference. There's no way to prototype a function in perl that takes either two scalars, or two arrays or two hashes as argument, without the arguments getting flatted into a single list.

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"; } }

Abigail