在perl中按顺序将哈希值转储到yaml文件

时间:2014-09-15 09:17:11

标签: perl

我想将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

1 个答案:

答案 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节点的内存地址查找。