perl - yml 文件合并为一个
问题描述
我打算使用“ use Hash::Merge qw( merge );
”将两个 yml 文件合并到一个 yml 文件中
这是我的示例脚本:-
use strict;
use warnings;
use Hash::Merge qw( merge );
use YAML::XS qw(Load Dump);
use File::Slurp qw(read_file write_file append_file);
my $yaml1 = "/home/test/one.yml";
my $yaml2 = "/home/test/two.yml";
my $in_yaml = read_file($yaml1, { binmode => ':raw' });
my $clkgrps = Load $in_yaml ;
my $in_yaml1 = read_file($yaml2, { binmode => ':raw' });
my $clkgrps1 = Load $in_yaml1;
my $clockgroups = merge($clkgrps, $clkgrps1);
my $out_yaml = Dump $clockgroups;
my $outFile = "clockgroups_used.yml" ;
print("Generating Yaml file: $outFile \n") ;
write_file($outFile, { binmode => ':raw' }, $out_yaml);
one.yml:-
emailName: David
emailAddresses:
- sillymoos@cpan.org
- perltricks.com@gmail.com
credentials:
username: sillymoose
password: itsasecret
两个.yml:-
emailName: Pranay
emailAddresses:
- heelo@cpan.org
- test@gmail.com
credentials:
username: link
password: sanity
执行我的脚本后,我确实看到最终 yml 文件 clockgroups_used.yml 的输出具有以下内容,这只是 one.yml 中的内容
---
credentials:
password: itsasecret
username: sillymoose
emailAddresses:
- sillymoos@cpan.org
- perltricks.com@gmail.com
- heelo@cpan.org
- test@gmail.com
emailName: David
我在这里做错什么了吗?为什么我看不到两个 yml 文件的合并?
解决方案
加载Hash::Merge
模块后,添加以下行:
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT');
的默认行为Hash::Merge
是不更改散列中元素的数据类型,并优先考虑 的第一个参数的内容merge
。设置RETAINMENT_PRECEDENT
指示Hash::Merge
在必要时通过创建数组来保留两个哈希的所有数据。
因此,生成的 YAML 文件是
---
credentials:
password:
- itsasecret
- sanity
username:
- sillymoose
- link
emailAddresses:
- sillymoos@cpan.org
- perltricks.com@gmail.com
- heelo@cpan.org
- test@gmail.com
emailName:
- David
- Pranay
推荐阅读
- children - 跟踪 AMI 后代的最佳方法是什么?
- android - 工具栏不允许在其中使用匹配父布局
- java - 使用滑块方法浏览大量图像
- azure-gov - 公共云中的应用程序是否可以被授权通过图形 api 从政府租户获取数据?
- azure - 接收者未收到 Mass Transit 的消息 - 订阅
- java - Java SpringBoot Postgres 删除行
- r - 使用 case_when 在内部发生变异
- python - Selenium 如何选择正文中的最后一个链接?
- python - 如何在不使用 Python 绘图的情况下检测季节性
- php - 帮助理解和解决我的 WordPress index.php 中的恶意代码