[英]Serialize YAML document from Perl data structure
我正在尝试从数据结构(尤其是哈希数组)中打印出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): ~
您使用的Perl数据结构与所需的YAML数据不对应。 它只是偶然地编译,您肯定已经看到警告
匿名哈希中元素的奇数个
当您执行代码时。 请不要忽略警告,尤其是在寻求代码帮助时
在YAML中, lines
元素是一个数组,而您的Perl数据将其作为哈希值。 您需要将方括号{ ... }
替换为方括号[...]
我还建议您避免使用YAML::Dump
,这是对YAML::Tiny
模块的误解。 YAML::XS
是YAML::XS
的首选Perl实现,并且是出色的libyaml
库的绑定
这不是YAML问题。 lines
应该映射到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,
}
}
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.