perl - 散列的未知散列
问题描述
我可以使用以下 perl 代码从数据库中获取数据:
my %hash = $vars->getVarHash; #load data into a hash
print Dumper(\%hash);
Dumper 的输出如下所示:
$VAR1 = {
'HASH(0x55948e0b06b0)' => undef
};
现在我知道这个散列指向一个变量的散列,并且它们每个都指向每个变量的选项列表(我猜是“散列的散列”),像这样:
HASH(0x55948e0b06b0) --> Variable_a --> Option_a_1, Option_a_2 ...
--> Variable_b --> Option_b_1, Option_b_2 ...
--> Variable_c --> ...
我如何正确取消引用此哈希,以便我可以获得变量的值并且每个都是选项?
解决方案
基本问题是您只能取消引用引用。哈希不是引用,因此“取消引用哈希”没有意义。
你的翻斗机输出,
$VAR1 = {
'HASH(0x55948e0b06b0)' => undef
};
不显示嵌套的数据结构或引用或任何东西。它实际上是一个单元素哈希,其(单个)键是字符串"HASH(0x55948e0b06b0)"
,其值为undef
. 你对这个结构无能为力。
可能发生的情况是getVarHash
返回对哈希的引用(单个值),该引用(通过分配给哈希)已隐式转换为对应值为undef
. 哈希键始终是字符串,因此丢失了原始参考值。
Perl 可以告诉你这个特殊的问题。你应该总是用你的 Perl 文件开始
use strict;
use warnings;
这个特殊错误的警告是
Reference found where even-sized list expected at foo.pl line 123.
解决方案是将返回的引用存储在标量变量中:
my $hash = $vars->getVarHash;
print Dumper($hash);
然后,您可以使用所有常用方法(如 eg 中所述perldoc perlreftut
)取消引用它并访问其内容,例如keys %$hash
,$hash->{$key}
等。
推荐阅读
- c# - 如何在 WPF 中创建“响应式图像网格”
- python - 如何根据 2 列中相似字符的数量对数据框进行排序?
- mysql - mysql.connector.errors.ProgrammingError: 1064 (42000)。导致 SQL 注入错误,修复后无法正确提交数据
- javascript - Vue.js:如何重置动态表单更改
- swift - 在多个目标中重用本地 Swift 包
- node.js - Nginx 与 SSL 和 Frontend + Backend 相同的服务器
- java - Java - XML 反序列化
- android - Inkwell Widget 允许意外的区域点击
- php - 为什么默认的 WordPress 配置文件有 /**#@+ 之类的注释
- html - 在 MS Office URI 方案中使用非 ASCII 字符时出错