gpt4 book ai didi

perl - 如何使用 Perl 的 YAML::Tiny 遍历 YAML 树?

转载 作者:行者123 更新时间:2023-12-04 14:21:15 31 4
gpt4 key购买 nike

我有一个像这样的 YAML 文档:

---
version: 1
rootdirectory:
- subdirectory:
- file1
- file2
- subdirectory2

我正在加载到一个 YAML::Tiny 对象中,如下所示:
$configuration = YAML::Tiny->read($configuration_file)

通过使用 Perl 调试器调用脚本,我看到我最终得到的是一组反射(reflect) YAML 源结构的嵌套散列和数组:
0  YAML::Tiny=ARRAY(0x84e3ba4)
0 HASH(0x80627dc)
'rootdirectory' => ARRAY(0x84e3d3c)
0 HASH(0x84352b0)
'subdirectory' => ARRAY(0x84e3df0)
0 'file1'
1 'file2'
1 'subdirectory2'
'version' => 1

因此,我可以毫无问题地执行以下操作:
print $configuration->[0]->{version}

并收到“1”的预期答案。同样,我也可以这样做:
print $configuration->[0]->{rootdirectory}->[0]->{subdirectory}->[0]

并收到“file1”的预期答案。

我的问题来自于我需要在上面的例子中导出我的文件名的所有先验知识。由于我试图允许我的脚本用户在 YAML 配置中描述任意目录结构,这还不够好。我需要能够从“根目录”“走”树。

所以,我会想象我可以做这样的事情:
print keys($configuration->[0])

我原以为会返回 'rootdirectory,version' ... 等等,遍历数组和散列,直到我走完这棵树。

当我尝试运行上面的示例时,我得到:
Type of arg 1 to keys must be hash (not array element)

在这一点上,我被卡住了。据我了解,$configuration->[0] 虽然是数组的一个元素,但它是一个包含散列的元素,我相信我应该能够针对它调用键函数。

我在这里缺少什么?

最佳答案

尝试

print "$_\n" for keys %{ $configuration->[0] };

您必须将数组元素“ $configuration->[0]”强制转换为带有“ %{...}”的哈希引用

所以要迭代它们:
for my $key ( keys %{ $configuration->[0] } ){
my $value = $configuration->[0]{$key};

print "$key => $value\n";
}

关于perl - 如何使用 Perl 的 YAML::Tiny 遍历 YAML 树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267266/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com