有没有更好的方法来引用哈希?



如果我有深度的多级(动态(哈希结构,我会尝试通过单独的变量引用更深层次的部分,如下所示:

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;

最新更新