Perl YAML模块中的别名解析错误?

Perl YAML模块中的别名解析错误?,perl,yaml,Perl,Yaml,我正在尝试使用Perl加载一个“简单”YAML文件: foo: &baz dog: cat cat: rat bar: <<: *baz rat: cheese foo:&baz 狗:猫 猫:老鼠 酒吧: YAML和YAML::Syck不支持是合乎逻辑的,因为这些解析器实现了YAML 1.0,并且该扩展是为YAML 1.1提出的 该扩展不是YAML 1.1规范的一部分,例如,YAML::XS所基于的libyaml本身不支持它。Ruby、Python和Java

我正在尝试使用Perl加载一个“简单”YAML文件:

foo: &baz
  dog: cat
  cat: rat
bar:
  <<: *baz
  rat: cheese
foo:&baz
狗:猫
猫:老鼠
酒吧:

YAML和YAML::Syck不支持是合乎逻辑的,因为这些解析器实现了YAML 1.0,并且该扩展是为YAML 1.1提出的

该扩展不是YAML 1.1规范的一部分,例如,YAML::XS所基于的libyaml本身不支持它。Ruby、Python和JavaScrip YAML解析器在libyaml库的顶部实现合并,这是YAML::XS似乎没有做到的


正如@bart所评论的,加载后遍历树有一些变通方法:

因此基本上我必须分叉这些模块中的一个,并插入解析别名的代码(这似乎是YAML 1.2的一部分?不能说我对阅读语言规范很熟悉),例如:如果您确实从基于libyaml的YAML::XS开始。或者,您可以使用支持合并的解析器对文件进行预处理,方法是读入文件并将其写回。除了我的ruamel.yaml Python解析器在往返时保留合并外,所有其他解析器都将“取消合并”映射,然后您可以使用这些库将其读入Perl中。@bart我可以用它扩展我的答案吗,或者您想自己将其作为答案发布吗?@Anthon当然,您可以扩展您的答案;)
{
  'foo' => {
    'cat' => 'rat',
    'dog' => 'cat'
  },
  'bar' => {
    'rat' => 'cheese',
    '<<' => $VAR1->{'foo'}
  }
}