将未定义的哈希值转储到yaml中

时间:2014-09-23 11:41:50

标签: perl

我将通过将哈希值转储到文件来创建yaml文件。但如果该值未定义,则打印~。如果值未定义,我需要打印nill。我需要设置哪个变量才能将未定义的值设为Nill

#!/usr/bin/perl
use strict;
use warnings;
use YAML qw(Dump Bless);

my $a=1;
my $b;
my $hash = { a => $a,b => $b };
open(FH,">file.yaml") or die "Can't open file.yaml: $!";
print FH Dump($hash);
close FH;

我需要输出

a : 1
b : Nill 

但它的印刷

a : 1
b : ~

1 个答案:

答案 0 :(得分:0)

nillNillYAML都没有任何意义,除非作为字符串,因此YAML不会为undef生成任何内容。如果您希望输出包含nillNill,则需要将其作为字符串存在于数据结构中。您可以使用以下代码将散列中的未定义值转换为字符串Nill

for (values %$hash) {
   $_ = 'Nill' if !defined($_);
}

如果您想要nullNull(而不是nillNill),那么您已经拥有了。{p> ~nullNull是等效的。见上述规范的第10.3.2节。