从Perl数据结构序列化YAML文档

从Perl数据结构序列化YAML文档,perl,yaml,Perl,Yaml,我试图从一个数据结构中打印出一个YAML文档,特别是一个散列数组,这就是我认为YAML::dump返回的结果。下面是我用来构建YAML文档并将其序列化的Perl代码 my @tagobj_header_table = { core => { type => $tagobj_type, size => $tagobj_size, blob => $tagobj_blob, }, text => { lines => {

我试图从一个数据结构中打印出一个YAML文档,特别是一个散列数组,这就是我认为YAML::dump返回的结果。下面是我用来构建YAML文档并将其序列化的Perl代码

my @tagobj_header_table =
{
core => {
    type => $tagobj_type,
    size => $tagobj_size,
    blob => $tagobj_blob,
},
text => {
     lines => {
     {
         offset => 0,
         length => 1
     },
     {
         offset => 1,
         length => 5,
     },
     {
         offset => 6,
         length => 7,
     },
     {
         offset => 13,
         length => 13,
     },
     {
         offset => 26,
         length => 1,
     }
     }
  }
};

my $dumper = YAML::Dumper->new;
my $tagobj_contents = $dumper->dump(@tagobj_header_table);
print $tagobj_contents;
下面是我希望YAML文档的样子,带有一些Perl字符串替换

---
core:
    type: $tagobj_type
    size: $tagobj_size
    blob: $tagobj_blob
text:
    lines:
        - offset: 0
          length: 1
        - offset: 1
          length: 5
        - offset: 6
          length: 7
        - offset: 13
          length: 13
        - offset: 26
          length: 1
以下是控制台的输出

---
core:
    blob: build\content\objects\36d80951814b5f08c7ba34cd7a5459b4c212ee6200ce247ac2a13d24b2fc0d57
    size: 31
    type: blob/text
text:
    lines:
        HASH(0x4d1b840):
            length: 13
            offset: 13
        HASH(0x4d1df38):
            length: 5
            offset: 1
        HASH(0x4d1eee8): ~

这不是YAML的问题<代码>行应映射到arrayref,而不是hashref:

text => {
     lines => { # this is an hashref, so
     {
         offset => 0,
         length => 1
     }, # this is a hash key, and gets stringified: "HASH(0x4d1df38)"
     {
         offset => 1,
         length => 5,
     }, # and this is a hash value
     {
         offset => 6,
         length => 7,
     }, # this is a key, also stringified: "HASH(0x4d1b840)"
     {
         offset => 13,
         length => 13,
     }, # and this is a value...
     {
         offset => 26,
         length => 1,
     }
     }
  }
};

这不是YAML的问题<代码>行应映射到arrayref,而不是hashref:

text => {
     lines => { # this is an hashref, so
     {
         offset => 0,
         length => 1
     }, # this is a hash key, and gets stringified: "HASH(0x4d1df38)"
     {
         offset => 1,
         length => 5,
     }, # and this is a hash value
     {
         offset => 6,
         length => 7,
     }, # this is a key, also stringified: "HASH(0x4d1b840)"
     {
         offset => 13,
         length => 13,
     }, # and this is a value...
     {
         offset => 26,
         length => 1,
     }
     }
  }
};

您使用的Perl数据结构与您需要的YAML数据不对应。这只是偶然的机会,它编译在所有,你一定看到了一个警告

匿名散列中奇数个元素

当您执行代码时。请不要忽略警告,尤其是在请求代码帮助时

在YAML中,
元素是一个数组,而Perl数据将其作为散列。您需要将大括号
{…}
替换为方括号
[…]


我还建议您避免使用
YAML::Dump
,这是对
YAML::Tiny
模块的miconceivehack
YAML::XS
是YAML的首选Perl实现,是优秀的
libyaml
库的绑定您使用的Perl数据结构与您需要的YAML数据不对应。这只是偶然的机会,它编译在所有,你一定看到了一个警告

匿名散列中奇数个元素

当您执行代码时。请不要忽略警告,尤其是在请求代码帮助时

在YAML中,
元素是一个数组,而Perl数据将其作为散列。您需要将大括号
{…}
替换为方括号
[…]


我还建议您避免使用
YAML::Dump
,这是对
YAML::Tiny
模块的miconceivehack
YAML::XS
是YAML的首选Perl实现,是优秀的
libyaml
库的绑定?价值观是什么?显然,您希望在那里有一个数组(
[]
),请将其作为答案,以便我可以接受它@mwp.text.lines是数据结构中的哈希(
{}
),但键是什么?价值观是什么?很明显,您希望在那里有一个数组(
[]
),请回答这个问题,这样我就可以@mwp接受它