散列哈希的未知哈希

Cap*_*efe 2 perl reference hashmap dereference

我可以使用以下perl代码从数据库中获取数据:

my %hash = $vars->getVarHash;   #load data into a hash
print Dumper(\%hash);
Run Code Online (Sandbox Code Playgroud)

Dumper的输出如下:

$VAR1 = {
          'HASH(0x55948e0b06b0)' => undef
        };
Run Code Online (Sandbox Code Playgroud)

现在我知道这个哈希指向一个变量哈希,并且每个哈希都指向每个变量的选项列表(我猜是"散列哈希"),这样:

HASH(0x55948e0b06b0) --> Variable_a --> Option_a_1, Option_a_2 ...
                     --> Variable_b --> Option_b_1, Option_b_2 ...
                     --> Variable_c --> ...
Run Code Online (Sandbox Code Playgroud)

我如何正确地取消引用此哈希,以便我可以获取变量的值,每个都是选项?

mel*_*ene 8

基本问题是您只能取消引用引用.哈希不是引用,因此"取消引用哈希"没有意义.

你的翻斗车输出,

$VAR1 = {
          'HASH(0x55948e0b06b0)' => undef
        };
Run Code Online (Sandbox Code Playgroud)

不显示嵌套数据结构或引用或任何内容.它实际上是一个单元素哈希,其(单个)键是字符串"HASH(0x55948e0b06b0)",其值是undef.你无法用这种结构做任何事情.

可能发生的是getVarHash返回对散列(单个值)的引用,(通过分配给散列)您已隐式转换为其对应值为的键undef.散列键始终是字符串,因此原始参考值丢失.

Perl可以告诉你这个特殊问题.您应该始终使用启动Perl文件

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

这个特殊错误的警告是

Reference found where even-sized list expected at foo.pl line 123.
Run Code Online (Sandbox Code Playgroud)

解决方案是将返回的引用存储在标量变量中:

my $hash = $vars->getVarHash;
print Dumper($hash);
Run Code Online (Sandbox Code Playgroud)

然后你可以使用所有常用的方法(如例如perldoc perlreftut)取消对它的引用,并访问其内容,如keys %$hash,$hash->{$key}等.