||
看代码猜测结果
my %hasha;
$hasha{1}{'x'}=1;
$hasha{1}{'y'}=1;
$hasha{1}{'z'}=1;
$hasha{2}{'x'}=1;
$hasha{2}{'y'}=2;
$hasha{2}{'z'}=3;
my $num=3;
my %hashbak=%hasha;
while($num--)
{
%hashb=%hashbak;
print "$hashb{2}{'x'}\n";
$hashb{2}{'x'}=10;
}
################
结果是1 10 10 而不是1 1 1 因为浅拷贝造成的
###############################################################################
所以我们要深拷贝,这样才能得到一个hash的副本
use Storable qw(dclone);
my %hasha;
$hasha{1}{'x'}=1;
$hasha{1}{'y'}=1;
$hasha{1}{'z'}=1;
$hasha{2}{'x'}=1;
$hasha{2}{'y'}=2;
$hasha{2}{'z'}=3;
my $num=3;
my %hashbak=%hasha;
my %hashb;
while($num--)
{
%hashb=%{dclone(\%hashbak)};
print "$hashb{2}{'x'}\n";
$hashb{2}{'x'}=10;
}
#####现在就是deep copy####
##结果就是1 1 1 ##############################################
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-20 04:38
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社