该表达式访问哪个哈希键?

1 perl

我正在跟踪Perl脚本,我无法理解下面的表达式应该做什么:

keys %{ $data->{net_assets_detail}->{$port}->{$manager} }   
Run Code Online (Sandbox Code Playgroud)

我试图从数据,端口或管理器中了解我们尝试访问哪个哈希的密钥?

以下是完整的代码:

foreach my $port ( keys %{$data->{net_assets_detail} } ) {    
        foreach my $manager (keys %{ $data->{net_assets_detail}->{$port} } ) {          


    my $fund_value = MOA::CLSUtils::get_manager_fund_value( $port, $manager, $args->{end_date} );    
    $fund_value ||=0;    
    my $net_asset_value = $data->{net_assets_manager}->{$port}->{$manager};    
    $net_asset_value ||=0;    


        foreach my $tran_type (keys %{ $data->{net_assets_detail}->{$port}->{$manager} } ) {                    
                my $value = $data->{net_assets_detail}->{$port}->{$manager}->{$tran_type};                          
                print OUT"$port\t";    
                print OUT"$manager\t";    
                print OUT"$tran_type\t";    
                print OUT"$value\n";    

            }    
        }    
    }    
}               
Run Code Online (Sandbox Code Playgroud)

sim*_*que 5

让我们逐一看一下这一行.

%{ $data->{net_assets_detail}->{$port}->{$manager} }
Run Code Online (Sandbox Code Playgroud)
  • 有一个名为的hashref $data.
  • 里面有一些钥匙.其中之一是net_assets_detail
  • 里面是hashref
  • 里面有一些钥匙.其中之一就是价值$port
  • 里面是hashref
  • 里面有一些钥匙.其中之一就是价值$manager

%{ ... }是取消引用hashref,因此内置函数可以使用散列.

keys通吃的哈希(这是从长啄间接引用),并返回它们作为一个列表.将foreach在该列表中迭代,并把每个键进入词法变量$tram_type是在循环体可用.