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

时间:2015-10-23 17:10:36

标签: perl

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

keys %{ $data->{net_assets_detail}->{$port}->{$manager} }   

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

以下是完整的代码:

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";    

            }    
        }    
    }    
}               

1 个答案:

答案 0 :(得分:5)

让我们逐一看一下这条线。

%{ $data->{net_assets_detail}->{$port}->{$manager} }
  • 有一个名为$data的hashref。
  • 里面有一些钥匙。其中之一是net_assets_detail
  • Inside是hashref
  • 里面有一些钥匙。其中之一是$port
  • 的价值
  • Inside是hashref
  • 里面有一些钥匙。其中之一是$manager
  • 的价值

%{ ... }正在取消引用hashref,因此期望哈希可以对其进行处理的内置函数。

keys获取哈希的所有(从长期内部取消引用)并将其作为列表返回。 foreach遍历该列表,并将每个键放入循环体中可用的词法变量$tram_type