Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中获得散列的嵌套键值?_Perl_Hash - Fatal编程技术网

如何在Perl中获得散列的嵌套键值?

如何在Perl中获得散列的嵌套键值?,perl,hash,Perl,Hash,我想迭代一个hash-ref并获取键(如果它们存在的话),但是我想要的键位于hash-ref的第二级。我想能够获取hash-ref的所有第一级键的这个键 例如: my $total = 0; foreach my $student (keys $students) { if ( exists $student->{???}->{points} ) { $total += $student->{points};

我想迭代一个hash-ref并获取键(如果它们存在的话),但是我想要的键位于hash-ref的第二级。我想能够获取hash-ref的所有第一级键的这个键

例如:

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

我遇到的问题是,我不想“关心”
$student->{???}
的值是什么,只想得到
{points}
,因为你把
$student
变量和
$student
变量混在一起了:

    if ( exists $student->{???}->{points} ) {
                ^^^^^^^^
                Should be $students
然而,如果你不关心你的第一级HoH,那么就不要重复它们

只需在上迭代即可:

产出:

42 is the answer

为什么要结束这个问题,这不是调试,而是关于理解perl中的散列循环。只迭代第二级散列有什么错?为什么不:
if(exists$students->{$student}->{points}{
foreach my$student(key%{$students}){
因为keys
%$students
如果您有一个hashref而不是hash…谢谢,我最终为每个$student(keys%$students){if(exists$students->{$student}->{points}{…},作为总和映射()我现在无法理解。我将尝试重构它,因为它是一行程序。还感谢您指出我在使用$student时的错误,现在我了解了如何使用哈希进行循环
42 is the answer