perl - 当严格的参考检查中存在同一级别的值时,perl检查是否存在哈希键
问题描述
对于以下严格检查的代码,它会引发错误。
use strict;
my $a;
my $b;
my $c;
my %database;
$database{'a'}{'b'}{'c'} = 'e';
$database{'a'}{'b'}{'c'}{'d'} = 'f';
foreach my $a (keys %database){
foreach my $b (keys %{$database{$a}}){
foreach my $c (keys %{$database{$a}{$b}}){
if (exists $database{$a}{$b}{$c}{'d'}){print "success!\n";}
}
}
}
错误信息:
Can't use string ("e") as a HASH ref while "strict refs" in use at test.pl line 8.
值“e”和键“d”处于同一级别。当 "exists" 尝试查找键 d 时,调试器会发现存在同一级别的值并引发错误,因为 'e' 不是要检查的键。保持hash的结构和使用strict时如何解决?
是的,它会在第 8 行引发一个错误。实际上,另一个人在一个文件中创建了这个没有严格的哈希,当我在另一个文件中写另一部分时,我有严格的并且它引发了这样一个问题。
解决方案
以下将字符串存储在$database{'a'}{'b'}{'c'}
:
$database{'a'}{'b'}{'c'} = 'e';
但以下内容希望$database{'a'}{'b'}{'c'}
作为参考:
$database{'a'}{'b'}{'c'}{'d'} = 'f';
假设您可以拥有任何级别的值,您需要将数据结构更改为如下所示:
$database{a}{children}{b}{children}{c}{value} = 'e';
$database{a}{children}{b}{children}{c}{children} = 'f';
推荐阅读
- node.js - 如何在heroku中托管一个不和谐的机器人(错误)
- android - Android:列表离开屏幕时的RecyclerView布局问题
- azure - 查询 Azure App Services 是否有备份设置
- c# - C# 找不到带有 GraphQL 的包
- javascript - Chart.js:如何设置图表的最小高度但仍保持纵横比?
- c++ - use of flow operators on objects
- javascript - 我需要帮助更新此数组状态以显示为表数据
- type-conversion - 如何在 AutoHotkey 中将变量转换为布尔值?
- postgresql - 空闲事务 mybatis jboss 6.4 postgres 9.6
- python - 使用 Python sqlparse 获取查询树/层次结构