I think it is even simpler:
Consider:
`use strict;
use Scalar::Util qw(weaken isweak);
my $a = [];
my $r1 = $a;
my $r2 = $a;
weaken $r1;
print "a is weak\n" if isweak $a;
print "r1 is weak\n" if isweak $r1;
print "r2 is weak\n" if isweak $r2;
`
So here we have a array_ref $a of which we make two further copies for which we prove again that they are different.
So to answer your initial question:
Given a reference you simple assign it to a scalar to get another reference to the same referent - no need for special syntax or type-glob fiddling... |