我有一个哈希,我将传递给子程序。我也将空哈希传递给子程序。我想将哈希的内容复制到空的哈希。
以下是我的代码的外观:
my %emptyHash = ();
my %sourceHash = ();
$sourceHash{'apple'} = 'red';
$sourceHash{'orange'} = 'orange';
mergeHash(\%emptyHash, \%sourceHash);
foreach my $k (keys %emptyHash)
{
print "key=>". $k. "value=>".$emptyHash{$k}. "\n";
}
sub mergeHash {
my $emptyHash = shift;
my $sourceHash = shift;
$emptyHash = $sourceHash;
}
当我在合并后打印emptyHash时,我仍然得到一个空哈希。我不能这样将一个哈希的值复制到另一个哈希吗?
答案 0 :(得分:4)
infoPage2
和$emptyhash
是引用。当您执行$sourcehash
时,您只需使变量$emptyhash = $sourcehash
包含与$emptyhash
相同的引用。
相反,您需要$sourcehash
,它会对哈希这些引用指向的行为进行操作。
答案 1 :(得分:1)
您想要快速复制还是深度复制?快速复制仅复制散列的顶级标量。如果哈希包含匿名数组或哈希值,则不会复制它们。相反,提到了它们。这意味着它们内部的任何更改都会导致复制的哈希值发生相同的变化。
快速复制:
%$empty_hash = %$source_hash;
深拷贝:
use Storable qw( dclone );
$empty_hash = declone( $source_hash );
Storable
是Perl附带的标准模块。有关标准模块的列表,请参阅perldoc perlmodlib
。
答案 2 :(得分:0)
我在下面修改了你的代码。
this.tenants = this.list.slice();