Perl:如何将键/值对推送到hashref并仍然保留引用

前端之家收集整理的这篇文章主要介绍了Perl:如何将键/值对推送到hashref并仍然保留引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
$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@H_301_3@ 
 

在它的结尾$a应该看起来像:

>

{
  'b' => {
           'c' => 1,'d' => 1,'e' => 1
         }
};@H_301_3@ 
 

在它结束时$b应该如下所示:

>

{
  'c' => 1,'e' => 1
}@H_301_3@ 
 

注意:它与执行操作相同:

$b->{d} = 1;
$b->{e} = 1;@H_301_3@ 
 

$b = {%$b,d => 1,e => 1};不是所希望的,因为它会创建$a的副本并丢失引用.

解决方法

%{$b} = ( d => 1,e => 1 );@H_301_3@ 
 

您只需取消引用匿名hash-ref,使其看起来像赋值运算符的哈希值.

你甚至可以这样做:

%{$b} = ( %{$b},e => 1 );@H_301_3@ 
 

在这些情况下,%{$b}对于%$b来说实际上只是视觉上的便利(尽管在某些情况下可能是语法消歧).

……或者你可以……

foreach ( qw/ d e / ) {
    $b->{$_} = 1;
}@H_301_3@ 
 

显然,你可能不打算将“1”的值分配给所有东西.切片怎么样:

@{$b}{ qw/ d e / } = ( 1,1 );@H_301_3@ 
 

perldoc perldata中讨论了切片,但是对于采用匿名散列切片并没有很好的perldoc描述.为此,您必须与所有关于引用的Perl文档达成协议,然后推断如何将其应用于切片语法. …或者在PerlMonks检查anonymous hash slices.

原文链接:https://www.f2er.com/Perl/171765.html

猜你在找的Perl相关文章