要合并的两个文件可以一次读取,不需要被视为单独的源文件。这允许使用<>
读取在命令行上作为参数传递的所有文件。
保留 的备份副本A.ini
只是在将合并的数据写入同名的新文件之前重命名它的问题。
该程序似乎可以满足您的需求。
use strict;
use warnings;
my $file_a = $ARGV[0];
my (@keys, %values);
while (<>) {
if (/\A\s*(.+?)\s*=\s*(.+?)\s*\z/) {
push @keys, $1 unless exists $values{$1};
$values{$1} .= $2;
}
}
rename $file_a, "$file_a.bak" or die qq(Unable to rename "$file_a": $!);
open my $fh, '>', $file_a or die qq(Unable to open "$file_a" for output: $!);
printf $fh "%s=%s\n", $_, $values{$_} for @keys;
输出(in A.ini
)
a=123abc
b=xyx
c=434
m=shank
n=paul