有没有办法使用指向哈希值的哈希引用更新哈希值?
我的哈希输出如下所示:
'Alternate' => {
'free' => '27.52',
'primary' => 'false',
'used' => '0.01',
'name' => '/mydir/journal2',
'size' => '50.00'
},
'Primary' => {
'free' => '60.57',
'primary' => 'true',
'used' => '0.06',
'name' => '/mydir/journal',
'size' => '64.00'
}
};
我尝试在哈希中创建对'used'属性的哈希引用,并尝试更新该值:
$hash_ref = \%hash->{"Primary"}->{used};
$hash_ref = "99%";
print $$hash_ref, "\n";
这改变了散列的值,但是我得到“在第X行弃用了散列作为参考”。我想知道我想做的事情是否可行以及我做错了什么。
由于
答案 0 :(得分:2)
...
'Primary' => {
'free' => '60.57',
'primary' => 'true',
'used' => '0.06',
'name' => '/mydir/journal',
'size' => '64.00'
}
...
尝试绕过这样做的弃用问题:
...
my $hash_ref = $hash{'Primary'}; # if you declared `%hash = ( .. );`
# or my $hash_ref = $hash->{'Primary'}; if you declared `$hash = { .. };`
print $hash_ref->{used}; # prints 0.06
$hash_ref->{used} = '0.07'; # update
print $href->{used}; # prints 0.07
...
perldsc,如果你想了解更多。
答案 1 :(得分:0)
您启动失败是因为您尝试创建标量的哈希引用。这是一种毫无意义的目标,因为它们是不同的数据类型。正如Filippo已经证明的那样,你已经将哈希引用作为更大哈希的值,所以你可以依赖它。
但是,如果你真的想要创建对标量的引用,那么你可以只编辑那个值,这就是你要做的:
use strict;
use warnings;
my $h = {
'Alternate' => {
'free' => '27.52',
'primary' => 'false',
'used' => '0.01',
'name' => '/mydir/journal2',
'size' => '50.00',
},
'Primary' => {
'free' => '60.57',
'primary' => 'true',
'used' => '0.06',
'name' => '/mydir/journal',
'size' => '64.00',
}
};
my $primary = $h->{Primary};
print $primary->{used}, "\n"; # outputs 0.06
my $usedref = \$h->{Primary}{used};
$$usedref = '0.07';
print $primary->{used}, "\n"; # outputs 0.07