Нет. Когда вы делаете это, вы возвращаете копию содержимого хэша, и эта копия НЕ связана, как вы и предполагали во втором абзаце.
Вы также правы в том, что для достижения своего результата вам нужно вместо этого вернуть ссылку на связанный хеш: return \%myhash;
Пример
use Tie::IxHash;
sub make_ordered_hash {
my @hash_contents = (1,11,5,15,3,13);
tie(my %myhash, Tie::IxHash, @hash_contents);
return %myhash;
}
sub make_ordered_hashref {
my @hash_contents = (1,11,5,15,3,13);
tie(my %myhash, Tie::IxHash, @hash_contents);
return \%myhash;
}
my @keys;
my %hash1 = make_ordered_hash();
@keys = keys %hash1;
print "By Value = @keys\n";
my $hash2 = make_ordered_hashref();
@keys = keys %$hash2;
print "By Reference = @keys\n";
Результат:
By Value = 1 3 5
By Reference = 1 5 3