Perl:如何将键/值对推送到hashref并仍然保留引用
发布时间:2020-12-15 21:58:10 所属栏目:大数据 来源:网络整理
导读:$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应该看起来像: { 'b' = { 'c' = 1,'d' = 1,'e' = 1 }}; 在它结束时$b应该如下所示: { 'c' = 1,'e' = 1} 注意:
$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应该看起来像: > { 'b' => { 'c' => 1,'d' => 1,'e' => 1 } }; 在它结束时$b应该如下所示: > { 'c' => 1,'e' => 1 } 注意:它与执行操作相同: $b->{d} = 1; $b->{e} = 1; $b = {%$b,d => 1,e => 1};不是所希望的,因为它会创建$a的副本并丢失引用. 解决方法%{$b} = ( d => 1,e => 1 ); 您只需取消引用匿名hash-ref,使其看起来像赋值运算符的哈希值. 你甚至可以这样做: %{$b} = ( %{$b},e => 1 ); 在这些情况下,%{$b}对于%$b来说实际上只是视觉上的便利(尽管在某些情况下可能是语法消歧). ……或者你可以…… foreach ( qw/ d e / ) { $b->{$_} = 1; } 显然,你可能不打算将“1”的值分配给所有东西.切片怎么样: @{$b}{ qw/ d e / } = ( 1,1 ); 在perldoc perldata中讨论了切片,但是对于采用匿名散列切片并没有很好的perldoc描述.为此,您必须与所有关于引用的Perl文档达成协议,然后推断如何将其应用于切片语法. …或者在PerlMonks检查anonymous hash slices. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |