Не удалось записать объединенные данные в файл yml

#perl

Вопрос:

Я пытаюсь объединить два файла yml со следующим perl кодом. Когда я печатал модуль $res via Dumper , я мог видеть данные.

Я запустил свой сценарий, но final.yml вместо исходных данных у меня есть справочные данные:-

 srcARRAY(0x1013320)local_pointerARRAY(0x10228f8)    
 

Код:-

 use warnings;
use strict;
use feature 'say';
use Data::Dump;
use Data::Dumper;
use Storable qw(dclone);
use YAML qw(LoadFile);
use File::Slurp qw(write_file);
use Hash::Merge qw(merge);
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT');

die "Usage: $0 file1 file2n" if @ARGV != 2;
my ($fname1, $fname2) = @ARGV;

my $yml1 = LoadFile($fname1);
my $yml2 = LoadFile($fname2);


my $res = merge($yml1, $yml2);
#print Dumper $res;
write_file("final.yml", { binmode => ':raw' }, %{$res});
 

Нужно ли нам устанавливать какие-либо пользовательские настройки в Hash::Merge модуле perl?

Ответ №1:

Чтобы записать данные YAML в файл, используйте функцию YAML Dump :

 use warnings;
use strict;
use YAML qw(LoadFile Dump);
use File::Slurp qw(write_file);
use Hash::Merge qw(merge);
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT');

die "Usage: $0 file1 file2n" if @ARGV != 2;
my ($fname1, $fname2) = @ARGV;

my $yml1 = LoadFile($fname1);
my $yml2 = LoadFile($fname2);

my $res = merge($yml1, $yml2);
write_file("final.yml", Dump($res));
 

Или вы также можете использовать YAML::DumpFile вместо File::Slurp::write_file :

 DumpFile("final.yml", $res);