$a = {b=>{c=>1}}; # set up ref
$b = $a->{b}; # ref the ref
$b .= (d=>1,e=>1); # where we want to assign multiple key/val at once
在它的结束$a
应该是这样的:的Perl:如何推键/值对到hashref和仍然保留的参考
{ 'b' => { 'c' => 1, 'd' => 1, 'e' => 1 } };
在它$b
结束应该看起来像:
{ 'c' => 1, 'd' => 1, 'e' => 1 }
注:这将是一样的做:
$b->{d} = 1;
$b->{e} = 1;
$b = { %$b, d=>1, e=>1 };
是不希望的,因为它创造的$a
副本,并失去了参考。
是的,我在询问之前看过perldata,但找不到任何具体的东西 - 我很高兴你能从中解读出某些东西。坦率地说,我很惊讶'%{$ b} =(%{$ b},d => 1,e => 1);'工作了(它仍然对所引用的'$ a'应用了更改) – vol7ron 2012-08-10 14:01:59
关于hashref片帮助我意识到' - >'不是必需的。使用'$ _'作为hashref,我尝试了'@ _-> {qw(key1 key2)}'这产生了一个神秘的错误信息:'不能使用未定义的值作为HASH引用' $ _} {qw(key1 key2)}' – Palec 2014-11-30 19:58:01
@Palec这可能不会影响你在做什么,但是在你的例子中'@ _'和'@ $ _'有两个不同的含义 – vol7ron 2014-12-01 14:55:28