我有一个哈希%h
,我想将其保存为YAML。
#!/usr/bin/perl
use warnings;
use strict;
my %h = ();
# -----
use YAML::Syck;
my $y = YAML::Syck::LoadFile('have_seen.yaml');
$y->%h ???
my $yaml = YAML::Syck::Dump($y);
$yaml::Syck::ImplicitUnicode = 1;
open F, ">have_seen.yaml" or die $!;
print F $yaml . "---\n";
close F;
但是接缝就像鸡和蛋一样。
如何首次编写yaml文件,以便可以阅读?
更新:根据接受的答案是解决方案
#!/usr/bin/perl
use warnings;
use strict;
use YAML::Syck;
use Data::Dumper;
my $first_time = 1;
if ($first_time) {
my %h = ("1" => 2);
open F, '>', 'seen.yaml';
print F YAML::Syck::Dump(\%h);
close F;
} else {
my $h = YAML::Syck::LoadFile('seen.yaml');
$h->{"3"} = 4;
print Dumper $h;
my $yaml = YAML::Syck::Dump($h);
$yaml::Syck::ImplicitUnicode = 1;
open F, ">seen.yaml" or die $!;
print F $yaml . "---\n";
close F;
}
答案 0 :(得分:4)
使用DumpFile
,和安装YAML :: XS。 YAML ::据我所知,Syck被认为已弃用/不支持。
~>perl -MYAML=DumpFile -le 'DumpFile("test.yml", { o => "hai" })'
~>cat test.yml
---
o: hai
答案 1 :(得分:2)
使用Dump
将任意对象转换为YAML编码的字符串,然后将该字符串打印到文件中。
$h{foo} = "bar";
$h{"answer to life, the universe, and everything"} = 42;
open F, '>', 'have_seen.yaml';
print F YAML::Syck::Dump( \%h );
close F;
答案 2 :(得分:0)
#!/usr/bin/perl
use warnings;
use strict;
use YAML::Any qw'DumpFile LoadFile';
my $data_filename = 'seen.yaml';
my $data = LoadFile( $data_filename );
unless( $data ){
# first time
$data = {
1 => 2
};
}
$data->{3} = 4;
DumpFile( $data_filename, $h );