别名在YAML模块中解析不正确?

时间:2016-04-25 20:32:15

标签: perl yaml

我试图加载一个"简单"使用Perl的YAML文件:

foo: &baz
  dog: cat
  cat: rat
bar:
  <<: *baz
  rat: cheese

使用YAMLYAML::XSYAML::Syck我从test script获得意外输出:

{
  'foo' => {
    'cat' => 'rat',
    'dog' => 'cat'
  },
  'bar' => {
    'rat' => 'cheese',
    '<<' => $VAR1->{'foo'}
  }
}

在这种情况下,{bar}->{dog}undef。通过YAML Lint(或甚至Ruby's YAML module)运行相同的输入,它会按预期输出。

如何让Perl解析并输出正确的格式?

1 个答案:

答案 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