我正試圖用下面的perl代碼來合并兩個yml檔案。 當我通過Dumper模塊列印$res時,我可以看到資料。
我運行了我的腳本,但是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);
使用 File::Slurp qw(write_file)。
使用 Hash::Merge qw(merge);
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT')。
die "用法。$0 file1 file2
" 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}) 。
a.yml:
local_pointer:
- 資料:
- dir:/release/p_analysis
exe: bin/test.sh
tool_name: power_hash
型別: exe
- dir: /complete/release/1.2/55603074
tool_name: axi_ip
型別: dir
名稱: code_test.config
src:
- dest: sw_config/
ip: TOT
name: defs.yml
- dest: models/
ip: TOT
name: makebuild.vh
b.yml:
local_pointer:
- 資料:
- dir: hw/debug/test/log/
exe: log.pl
tool_name: test1
型別: exe
- dir: /releaase_test/p_analysis
exe: bin/test1.sh
tool_name: power1_hash
型別: exe
名稱: code_test.config
src:
- dest: sw_configs/
ip: TOT
name: defs111.yml
- dest: models/
ip: TOT
name: testbuild.vh
我正在尋找:-
local_pointer:
- 資料:
- dir:/release/p_analysis
exe: bin/test.sh
tool_name: power_hash
型別: exe
- dir: /complete/release/1.2/55603074
tool_name: axi_ip
型別: dir
- dir: hw/debug/test/log/
exe: log.pl
tool_name: test1
型別: exe
- dir: /releaase_test/p_analysis
exe: bin/test1.sh
tool_name: power1_hash
型別: exe
名稱: code_test.config
src:
- dest: sw_config/
ip: TOT
name: defs.yml
- dest: models/
ip: TOT
name: makebuild.vh
- dest: sw_configs/
ip: TOT
name: defs111.yml
- dest: models/
ip: TOT
name: testbuild.vh
我們是否需要在perl Hash::Merge模塊中設定任何自定義設定?
uj5u.com熱心網友回復:
要把YAML資料寫到一個檔案中,使用YAML Dump函式:
use warnings;
use strict;
use YAML qw(LoadFile Dump);
使用 File::Slurp qw(write_file)。
使用 Hash::Merge qw(merge);
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT')。
die "用法。$0 file1 file2
" 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) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328431.html
標籤:
