显式散列解除引用与箭头差异

epi*_*rus 1 perl hash reference

考虑简单的Hash of Hash引用.当我解除(内部)哈希值并改变它的一些值时,这不会转移到哈希的原始哈希值.但是用箭头表示法确实如此.我检查箭头符号的地方只是简单的解释,所以给出了什么?

use Data::Dumper;

$HoH{"one"}={'f1' => "junk",
      'f2' => 0};

$href = $HoH{"one"};
%hh=%{$HoH{"one"}};

print Dumper($href);

$href->{'f2'}=1;
$href->{'f1'}="newJunk";

print Dumper($HoH{"one"});

$hh{'f2'}=0;
$hh{'f1'}="oldJunk";

print Dumper($HoH{"one"});
Run Code Online (Sandbox Code Playgroud)

amo*_*mon 5

这行做了一个副本:

%hh=%{$HoH{"one"}};
Run Code Online (Sandbox Code Playgroud)

之后,哈希值的更改%hh不会反映在hashref中$HoH{one}.

特别是,上面的行是列表赋值的一种形式,它执行复制.没有传递散列引用,就像这样

$href = $HoH{"one"};
Run Code Online (Sandbox Code Playgroud)