我正在跟踪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";
}
}
}
}
答案 0 :(得分:5)
让我们逐一看一下这条线。
%{ $data->{net_assets_detail}->{$port}->{$manager} }
$data
的hashref。 net_assets_detail
$port
$manager
%{ ... }
正在取消引用hashref,因此期望哈希可以对其进行处理的内置函数。
keys
获取哈希的所有键(从长期内部取消引用)并将其作为列表返回。 foreach
遍历该列表,并将每个键放入循环体中可用的词法变量$tram_type
。