如何使用Perl的YAML :: Tiny走YAML树?
发布时间:2020-12-15 22:05:04 所属栏目:大数据 来源:网络整理
导读:我有一个这样的YAML文档: ---version: 1rootdirectory: - subdirectory: - file1 - file2 - subdirectory2 我正在加载到这样的YAML :: Tiny对象: $configuration = YAML::Tiny-read($configuration_file) 我从使用Perl调试器调用脚本看到,我最终得到的是一
我有一个这样的YAML文档:
--- version: 1 rootdirectory: - subdirectory: - file1 - file2 - subdirectory2 我正在加载到这样的YAML :: Tiny对象: $configuration = YAML::Tiny->read($configuration_file) 我从使用Perl调试器调用脚本看到,我最终得到的是一组嵌套的哈希和数组,它们反映了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配置中描述任意目录结构,所以这还不够好.我需要能够从’rootdirectory’“走”树. 所以,我想我可以做到这样的事情: print keys($configuration->[0]) 我原本应该返回’rootdirectory,version’……等等,遍历数组和哈希,直到我走过树. 当我尝试运行上面的例子时,我得到: Type of arg 1 to keys must be hash (not array element) 此时我被困住了.据我了解,$configuration-> [0]虽然是数组的元素,但是包含哈希的元素,我相信我应该可以调用key函数. 我在这里错过了什么? 解决方法
尝试
print "$_n" for keys %{ $configuration->[0] }; 你必须强制数组元素“$configuration-> [0]”进入带有“%{…}”的哈希引用 所以迭代它们: for my $key ( keys %{ $configuration->[0] } ){ my $value = $configuration->[0]{$key}; print "$key => $valuen"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |