我正在尝试使用以下代码合并两个 yml 文件perl。当我打印$resviaDumper模块时,我可以看到数据。
我运行了我的脚本,但final.yml有参考数据,而不是原始数据:-
srcARRAY(0x1013320)local_pointerARRAY(0x10228f8)
Run Code Online (Sandbox Code Playgroud)
代码:-
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 file2\n" 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});
Run Code Online (Sandbox Code Playgroud)
我们是否需要在 perlHash::Merge模块中设置任何自定义设置?
我正在尝试使用Hash::Mergeperl 模块合并 2 个 yml 文件。并尝试使用DumpfromYMAL模块将其转储到 yml 文件。
use strict;
use warnings;
use Hash::Merge qw( merge );
Hash::Merge::set_behavior('RETAINMENT_PRECEDENT');
use File::Slurp qw(write_file);
use YAML;
my $yaml1 = $ARGV[0];
my $yaml2 = $ARGV[1];
my $yaml_output = $ARGV[2];
my $clkgrps = &YAML::LoadFile($yaml1);
my $clkgrps1 = &YAML::LoadFile($yaml2);
my $clockgroups = merge($clkgrps1, $clkgrps);
my $out_yaml = Dump $clockgroups;
write_file($yaml_output, { binmode => ':raw' }, $out_yaml);
Run Code Online (Sandbox Code Playgroud)
合并 yml 文件后,我可以看到重复的条目,即两个 yml 文件中的以下内容相同。合并时,它将它们视为不同的条目。我们有处理重复的隐式方法吗?
我有文件列表(超过 2 个),我需要在其中验证所有这些文件是否相同。
我尝试使用File::Comparemodule ,但它似乎只接受两个文件。但就我而言,我有多个文件要验证其内容是否相同?我们有没有其他方法可以满足我的要求。
我想使用以下代码将我的命令输出(标准输出和标准错误)重定向到 test.log 文件。
我试图通过提供一些无效的选项(-force)来检查我的命令的退出状态ls
use strict;
use warnings;
#system("ls 2>&1 | tee logfile");
#system("ls > lllog ");'
my $cmd = &exec_cmd("cd reg_folder && ls -force 2>&1 | tee test.log");
sub exec_cmd{
system(@_);
my $result = $?;
print "===result $result===\n";
if(($result) != 0) {
print "status $result\n";
exit;
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
输出:-
ls: invalid option -- 'e'
Try `ls --help' for more information.
===result 0===
Run Code Online (Sandbox Code Playgroud)
运行 system command 后,我期望退出状态应该是非零,并且它必须进入if块。但它显示退出状态就0好像命令失败一样。
谢谢。