我需要在没有太多关于Perl的知识的情况下对现有脚本进行调试。
该脚本使用以下数据类型来存储文件中的所有字段:
${$LineRefs->{FIELD_NAME}}
我一直在尝试通过迭代这个标量/哈希/数组或任何可能的方式来找到所有可能的字段,但我不知道如何操作。
请问有人可以指点我吗?
我需要在没有太多关于Perl的知识的情况下对现有脚本进行调试。
该脚本使用以下数据类型来存储文件中的所有字段:
${$LineRefs->{FIELD_NAME}}
我一直在尝试通过迭代这个标量/哈希/数组或任何可能的方式来找到所有可能的字段,但我不知道如何操作。
请问有人可以指点我吗?
这确实非常奇怪
$LineRefs
是一个哈希表的引用,其中有一个键为 FIELD_NAME
的元素,其值是一个标量的 引用
就像这样
use v5.14;
my $LineRefs = {
FIELD_NAME => \99,
};
print ${ $LineRefs->{FIELD_NAME} }, "\n";
99
哈希和数组的引用很常见,因为它们允许一个大数据结构被表示为单个标量。但是对标量的引用远不如此有用,因为它们只是将一个标量替换为另一个标量。
很抱歉,感谢@glennjackman的帮助。我匆忙阅读了问题,并假设它是关于为什么哈希元素被解引用为标量的。
我一直在尝试弄清楚如何通过迭代这个标量/哈希/数组或其他任何可能的方式来单独找到所有可能的字段,但我完全不知道该怎么做。
你正在处理一个“哈希”(hash),它类似于数组,但由字符串(键)而不是整数(索引)进行索引。
你可以像这样打印所有的键和它们的值。由于你的变量$LineRefs
是一个哈希引用,所以你需要将其解引用为%$LineRefs
。for my $key ( keys %$LineRefs ) {
my $value = $LineRefs->{$key};
print "$key => $value\n";
}
SCALAR(0x640448)
的值被打印出来。keys %$LineRefs
找到所有的字段 -- say for keys %$LineRefs;
- glenn jackmanData::Dumper
。它用于以可读形式转储Perl结构,无论它们有多么复杂。它是核心分发的一部分。尝试use Data::Dumper; print Dumper($my_strucutre);
。 - PerlDuckkeys %$LineRefs
返回了我所需的内容。 - Subbeh
${$LineRefs->{FIELD_NAME}}
是你的示例语句吗? - Borodin