这个数据结构如何工作?

Sub*_*beh 4 perl

我必须对现有脚本进行一些调试,而不需要了解有关perl的大量知识.

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

${$LineRefs->{FIELD_NAME}}
Run Code Online (Sandbox Code Playgroud)

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

有谁能请我指出正确的方向?

Bor*_*din 5

这当然很奇怪

$LineRefs是对散列的引用,该散列具有带键的元素,FIELD_NAME其值是对标量的引用

像这样

use v5.14;

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

print ${ $LineRefs->{FIELD_NAME} }, "\n";
Run Code Online (Sandbox Code Playgroud)

产量

99
Run Code Online (Sandbox Code Playgroud)

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



对不起,谢谢@glennjackman我太匆忙地读了这个问题并假设它是关于为什么哈希元素被作为标量去引用的原因

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

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

您可以使用keys,valueseach迭代哈希

您可以像这样打印所有键及其值.由于您的变量$LineRefs是一个散列引用您需要解引用它作为%$LineRefs

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

如果您的哈希值确实是对标量的引用,那么您将看到SCALAR(0x640448)为值打印的内容

  • 您可以使用`键%$ LineRefs`找到所有字段 - 对于键%$ LineRefs;`来说 (2认同)