如何在Perl中获取哈希的嵌套键值?

时间:2014-08-23 21:41:30

标签: perl hash

我想迭代一个哈希引用并获取密钥(如果它们存在),但我想要的密钥位于哈希引用的第二级。我希望能够获得具有它的哈希引用的所有第一级键的此键

示例:

    my $total = 0;
    foreach my $student (keys $students) {
        if ( exists $student->{???}->{points} ) {
            $total += $student->{points};
        }
    }
    return $total;

我遇到的问题是我想“不关心”$student->{???}的价值是什么,只是想要{points}来获取它

1 个答案:

答案 0 :(得分:2)

您将$students变量与$student变量混合在一起:

    if ( exists $student->{???}->{points} ) {
                ^^^^^^^^
                Should be $students

但是,如果你不关心你的第一级HoH的keys,那么就不要迭代它们。

只需迭代values

use strict;
use warnings;

use List::Util qw(sum);

my $students = {
    bob => { points => 17 },
    amy => { points => 12 },
    foo => { info   => 'none' },
    bar => { points => 13 },
};

my $total = sum map { $_->{points} // 0 } values %$students;

print "$total is the answer\n";

输出:

42 is the answer