37,721
社区成员
发帖
与我相关
我的任务
分享
use v5.12;
@ARGV = qw( 1.txt 2.txt 3.txt );
#自己改成命令行吧,第一个是旧文件,第二个是新文件,第三个是结果存哪
my $res_file = pop(@ARGV);
my (%res, @keys);
my ($k, $v);
while(<>){
chomp();
($k, $v) = split(/\s*=\s*/, $_);
push(@keys, $k) unless(exists($res{$k}));
$res{$k} = $v;
}
open(FH_RES, '>', $res_file) or die("$!\n");
print(FH_RES "$_=$res{$_}\n") foreach(@keys);
close(FH_OLD);
use v5.12;
open(FH_OLD, "1.txt") or die("$!\n");
open(FH_NEW, "2.txt") or die("$!\n");
$/=undef;
my %old = split(/\s*=\s*|\n/, <FH_OLD>);
close(FH_OLD);
my %new = split(/\s*=\s*|\n/, <FH_NEW>);
close(FH_NEW);
my %res = (%old, %new);
open(FH_OLD, '>', "1.txt") or die("$!\n");
my ($k, $v);
print(FH_OLD "$k=$v\n") while(($k, $v) = each(%res));
close(FH_OLD);