[英]Perl: Writing multiple headers to single YAML document
以下是我想要的輸出YAML文檔。
---
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
這是我用來創建要序列化的YAML文檔的代碼。
sub make_tagobj_core_header {
return ({
core => {
type => $tagobj_type,
size => $tagobj_size,
blob => $tagobj_blob,
}
});
}
sub make_tagobj_text_header {
my @tagobj_text_lines;
my ($lineno, $length, $offset);
$offset = 0;
while(my $line = <$object_fh>) {
$lineno = $. - 1;
$length = length($line);
push @tagobj_text_lines, {
offset => $offset,
length => $length,
};
$offset += $length;
}
return ({
text => {
lines => [@tagobj_text_lines]
}
})
}
}
my @tagobj_header_table;
push @tagobj_header_table, make_tagobj_core_header;
push @tagobj_header_table, make_tagobj_text_header;
my $dumper = YAML::Dumper->new;
print $dumper->dump(@tagobj_header_table);
這是輸出。
---
core:
blob: build\content\objects\36d80951814b5f08c7ba34cd7a5459b4c212ee6200ce247ac2a13d24b2fc0d57
size: 31
type: blob/text
---
text:
lines:
- length: 1
offset: 0
- length: 5
offset: 1
- length: 7
offset: 6
- length: 13
offset: 13
- length: 1
offset: 26
我哪里做錯了? 我認為我需要一系列散列作為YAML中的頂級實體,但是它們會作為單獨的文檔打印出來,並以'---'分隔。 我想刪除它而不用破壞YAML :: Dumper :: dump的輸出,因為我有一個用例,它在一個文件中包含多個結構相同的YAML文檔,規范支持。
如您所知,
a: b
c: d
是通過轉儲哈希值獲得的,因此您希望將哈希值作為文檔的頂層。 概念證明:
print YAML::Dumper->new->dump({
core => {
blob => 'build\\content\\objects\\36d80951814b5f08c7ba34cd7a5459b4c212ee6200ce247ac2a13d24b2fc0d57',
size => 31,
type => 'blob/text',
},
text => {
lines => [
{ length => 1, offset => 0 },
{ length => 5, offset => 1 },
{ length => 7, offset => 6 },
{ length => 13, offset => 13 },
{ length => 1, offset => 26 },
],
},
});
輸出:
---
core:
blob: build\content\objects\36d80951814b5f08c7ba34cd7a5459b4c212ee6200ce247ac2a13d24b2fc0d57
size: 31
type: blob/text
text:
lines:
- length: 1
offset: 0
- length: 5
offset: 1
- length: 7
offset: 6
- length: 13
offset: 13
- length: 1
offset: 26
所以改變
my @tagobj_header_table;
push @tagobj_header_table, make_tagobj_core_header;
push @tagobj_header_table, make_tagobj_text_header;
my $dumper = YAML::Dumper->new;
print $dumper->dump(@tagobj_header_table);
至
my %doc = (
%{ make_tagobj_core_header() },
%{ make_tagobj_text_header() },
);
print YAML::Dumper->new->dump(\%doc);
盡管我認為最好是更改潛艇,以便進行以下工作:
my %doc = (
core => make_tagobj_core_header(),
text => make_tagobj_text_header(),
);
print YAML::Dumper->new->dump(\%doc);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.