这个数据结构如何工作?

时间:2016-02-01 15:35:02

标签: perl

我必须对现有脚本进行一些调试,而不需要了解perl。

此脚本使用这些数据类型来存储文件中的所有字段:

${$LineRefs->{FIELD_NAME}}

我一直试图弄清楚如何通过迭代这个标量/散列/数组或者它可能是什么来分别找到所有可能的字段,但我不知道如何。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:5)

这当然很奇怪

$LineRefs是对哈希的引用,该哈希包含一个键为FIELD_NAME的元素,其值为引用到标量

喜欢这个

use v5.14;

my $LineRefs = {
    FIELD_NAME => \99,
};

print ${ $LineRefs->{FIELD_NAME} }, "\n";

输出

99

对哈希和数组的引用很常见,因为它们允许大型数据结构由单个标量表示。但是对标量的引用远没那么有用,因为它们只是用另一个标量替换标量


对不起,谢谢@glennjackman我太匆忙地读了这个问题,并假设这是为什么哈希元素被解除引用为标量

  

我一直在试图弄清楚如何通过迭代这个标量/散列/数组或者它可能是什么来分别找到所有可能的字段但是我不知道如何

你正在处理一个 hash ,它就像一个数组,但是由字符串(键)而不是整数(索引)索引

您可以使用keysvalueseach来迭代哈希

您可以像这样打印所有键及其值。由于您的变量$LineRefs哈希引用,因此您需要取消引用它为%$LineRefs

for my $key ( keys %$LineRefs ) {
    my $value = $LineRefs->{$key};
    print "$key => $value\n";
}

如果您的哈希值确实是对标量的引用,那么您将看到为值{<1}}打印的内容