我想将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
解决方法
Perl普通哈希值没有排序,默认情况下
YAML
模块对键进行排序.
但是,YAML提供了Bless功能,因此您可以更改数据结构输出的行为.对于Hashes,这允许您指定要输出的特定键及其顺序:
use strict; use warnings; use YAML qw(Dump Bless); my $hash = { b => "2",c => "3" }; Bless($hash)->keys( [qw(b a d c)] ); print Dump($hash);
产量
b: 2 a: 1 d: 4 c: 3
请注意,Blessing Perl数据结构无论如何都不会改变它.额外信息单独存储,并由Blessed节点的内存地址查找.