我想将hash的内容顺序转储到yaml文件中,我不希望它按字母方式打印。
#!usr/bin/perl
use strict;
use warnings;
use YAML qw(Dump);
my $hash = { b => "2", a => "1", d => "4", c => "3" };
open( FH, ">file.yaml" ) or die "Can't open file.yaml : $!\n";
print FH Dump($hash);
close FH;
预期输出
---
b:2
a:1
d:4
c:3
但是输出为
---
a:1
b:2
c:3
d:4
答案 0 :(得分:6)
Perl plain哈希值没有排序,YAML
模块默认对键进行排序。
但是,YAML
提供了Bless
函数,因此您可以更改数据结构输出的行为。对于哈希,这允许您指定要输出的特定键及其顺序:
use strict;
use warnings;
use YAML qw(Dump Bless);
my $hash = { b => "2", a => "1", d => "4", c => "3" };
Bless($hash)->keys( [qw(b a d c)] );
print Dump($hash);
输出
b: 2
a: 1
d: 4
c: 3
请注意,祝福Perl数据结构无论如何都不会改变它。额外信息单独存储,并由Blessed节点的内存地址查找。