perl - 有没有更好的方法来引用哈希?
问题描述
如果我有深度的多级(动态)哈希结构,我会尝试通过单独的变量引用更深的部分,如下所示:
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;
推荐阅读
- regex - 我怎么能替换一些 | 经过 :?
- php - 如何在逗号分隔列上的 Laravel eloquent 中创建条件关系
- javascript - 如何使用 Angular 和 bootstrap-ui 初始化下拉菜单
- laravel - 在 Vue.js 的段落中添加 img 属性
- php - 如何使用 pdo 删除数据库中的一行($stmt 声明为 false)
- asp.net-core - WEB.API 核心,服务器查询到 Microsoft Graph 或 Outlook
- django - 尝试使用 WeasyPrint 保存 PDF 字符串会导致 UnicodeDecodeError
- php - 仅从具有内部联接的第三个表中获取 1 行
- safari - 在 Safari 应用程序扩展中捕获网页的屏幕截图
- linux - centos服务器中检查空闲内存的问题