我想迭代一个哈希引用并获取密钥(如果它们存在),但我想要的密钥位于哈希引用的第二级。我希望能够获得具有它的哈希引用的所有第一级键的此键
示例:
my $total = 0;
foreach my $student (keys $students) {
if ( exists $student->{???}->{points} ) {
$total += $student->{points};
}
}
return $total;
我遇到的问题是我想“不关心”$student->{???}
的价值是什么,只是想要{points}
来获取它
答案 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