$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
Run Code Online (Sandbox Code Playgroud)
它的结尾$a应该是这样的:
{
'b' => {
'c' => 1,
'd' => 1,
'e' => 1
}
};
Run Code Online (Sandbox Code Playgroud)它的结尾$b应该是这样的:
{
'c' => 1,
'd' => 1,
'e' => 1
}
Run Code Online (Sandbox Code Playgroud)注意:它与执行操作相同:
$b->{d} = 1;
$b->{e} = 1;
Run Code Online (Sandbox Code Playgroud)
$b = { %$b, d=>1, e=>1 };不是所希望的,因为它会创建一个副本$a并丢失引用.
%{$b} = ( d => 1, e => 1 );
Run Code Online (Sandbox Code Playgroud)
您只需取消引用匿名hash-ref,使其看起来像赋值运算符的哈希值.
你甚至可以这样做:
%{$b} = ( %{$b}, d => 1, e => 1 );
Run Code Online (Sandbox Code Playgroud)
在这些情况下,%{$b}实际上只是一种视觉上的便利(尽管在某些情况下可能是一种语法消歧)%$b.
......或者你可以......
foreach ( qw/ d e / ) {
$b->{$_} = 1;
}
Run Code Online (Sandbox Code Playgroud)
显然,你可能不打算将"1"的值分配给所有东西.切片怎么样:
@{$b}{ qw/ d e / } = ( 1, 1 );
Run Code Online (Sandbox Code Playgroud)
在perldoc perldata中讨论了切片,但是对于采用匿名散列切片并没有真正好的perldoc描述.为此,您必须与所有关于引用的Perl文档达成协议,然后推断如何将其应用于切片语法....或者在PerlMonks上检查匿名哈希切片.
使用散列切片表示法.
@$b{"d","e"} = (1,1);
%newdata = (d => 1, e => 1);
@$b{keys %newdata} = values %newdata;
Run Code Online (Sandbox Code Playgroud)