Sorry for the reply to an old-node, but I was wondering what you meant by "reference-safe", and thought you might mean something like the following (which I thought might emit a "Modification of a read-only value" error if the $_ in the for loop were still referring to the keys of the hash), but it seems to work just fine without error (tested on 5.6 and 5.8):
#!/usr/bin/perl
use strict;
use warnings;
sub merge {
my %hash;
@hash{@_} = ();
sort keys %hash;
}
my @array1 = qw(a b c d e);
my @array2 = qw(c d e f g);
for (merge(@array1, @array2)) {
$_++;
print "$_\n";
}