小编RAM*_*AMA的帖子

无法将合并数据写入 yml 文件

我正在尝试使用以下代码合并两个 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模块中设置任何自定义设置?

perl

4
推荐指数
1
解决办法
63
查看次数

合并两个 yml 文件不处理重复项?

我正在尝试使用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 文件中的以下内容相同。合并时,它将它们视为不同的条目。我们有处理重复的隐式方法吗?

perl yaml perl-data-structures

2
推荐指数
1
解决办法
190
查看次数

在 perl 中比较多个文件内容

我有文件列表(超过 2 个),我需要在其中验证所有这些文件是否相同。

我尝试使用File::Comparemodule ,但它似乎只接受两个文件。但就我而言,我有多个文件要验证其内容是否相同?我们有没有其他方法可以满足我的要求。

perl

1
推荐指数
1
解决办法
63
查看次数

即使命令失败,退出状态也会返回“0”

我想使用以下代码将我的命令输出(标准输出和标准错误)重定向到 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好像命令失败一样。

谢谢。

bash shell perl

1
推荐指数
1
解决办法
58
查看次数

标签 统计

perl ×4

bash ×1

perl-data-structures ×1

shell ×1

yaml ×1