我试图加载一个"简单"使用Perl的YAML文件:
foo: &baz
dog: cat
cat: rat
bar:
<<: *baz
rat: cheese
使用YAML,YAML::XS或YAML::Syck我从test script获得意外输出:
{
'foo' => {
'cat' => 'rat',
'dog' => 'cat'
},
'bar' => {
'rat' => 'cheese',
'<<' => $VAR1->{'foo'}
}
}
在这种情况下,{bar}->{dog}
为undef
。通过YAML Lint(或甚至Ruby's YAML module)运行相同的输入,它会按预期输出。
如何让Perl解析并输出正确的格式?
答案 0 :(得分:2)
YAML和YAML :: Syck不支持merge key language-independent type是合乎逻辑的,因为这些解析器实现了YAML 1.0,并且为YAML 1.1提出了扩展。
扩展名不是YAML 1.1规范的一部分,例如YAML :: XS所基于的libyaml不支持它自己。 Ruby,Python和JavaScrip YAML解析器在libyaml库之上实现合并,YAML :: XS似乎没有。
正如@bart评论的那样,加载后遍历树有一些解决方法:http://www.perlmonks.org/?node_id=813443