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

shr*_*ail 4 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;
Run Code Online (Sandbox Code Playgroud)

预期的产出是

---
b:2
a:1
d:4
c:3
Run Code Online (Sandbox Code Playgroud)

但我输出了

---
a:1
b:2
c:3
d:4
Run Code Online (Sandbox Code Playgroud)

Сух*_*й27 6

Perl普通哈希值没有排序,YAML模块默认对键进行排序.

但是,YAML提供Bless函数以便您可以更改数据结构的输出方式.对于Hashes,这允许您指定要输出的特定键及其顺序:

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);
Run Code Online (Sandbox Code Playgroud)

产量

b: 2
a: 1
d: 4
c: 3
Run Code Online (Sandbox Code Playgroud)

请注意,Blessing Perl数据结构无论如何都不会改变它.额外信息单独存储,并由Blessed节点的内存地址查找.