繁体   English   中英

如何使用 Perl 中的散列引用更新散列值?

[英]How can I update a hash value using a hash reference in Perl?

有没有办法使用指向散列值的散列引用来更新散列中的值?

我的哈希输出如下所示:

    '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 行不推荐使用散列作为参考”。 我想知道我正在尝试做的事情是否可行以及我做错了什么。

 ...
'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

您的失败开始是因为您尝试创建对标量的哈希引用。 这是一种毫无意义的目标,因为它们是不同的数据类型。 正如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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM