如果我有深度的多级(动态(哈希结构,我会尝试通过单独的变量引用更深层次的部分,如下所示:
my $multilevel_dynamic_hash;
my $dynamic_a = int( rand() * 100 );
my $dynamic_b = int( rand() * 100 );
my $dynamic_c = int( rand() * 100 );
$multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c } = {};
my $reference_as_hashref = $multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c };
call_to_some_subroutine( $reference_as_hashref );
现在,而不是那两行
$multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c } = {};
my $reference_as_hashref = $multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c };
是否可以避免第一行并声明$reference_as_hashref
,以便它将最后一部分($dynamic_c
(视为下一级哈希的键?
编辑
我想参考一下,像这样:
my $reference_as_hashref = $multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c }{};
注意! 最后{}
相反,首先我必须告诉值是hashref,然后我可以引用它。一步到位可能吗?
如果目标是减少代码重复,您可以简单地更改分配内容的顺序。
例如
$multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c } = {};
my $hashref = $multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c };
和
my $hashref = {};
$multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c } = $hashref;
产生相同的结果。
但是,还有一个更简单的解决方案。
$multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c } = {};
my $hashref = $multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c };
也可以写成
my $hashref = $multilevel_dynamic_hash->{ $dynamic_a }{ $dynamic_b }{ $dynamic_c } = {};
标量赋值是右关联,因此$a = $b = $c;
等效于$a = ( $b = $c );
。它返回其左侧,因此$a = ( $b = $c )
等效于$b = $c; $a = $b;