マージされる 2 つのファイルは、1 回のパスで読み取ることができ、別個のソース ファイルとして扱う必要はありません。これにより、 を使用<>
して、コマンド ラインでパラメーターとして渡されたすべてのファイルを読み取ることができます。
のバックアップ コピーを保持する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;
出力(でA.ini
)
a=123abc
b=xyx
c=434
m=shank
n=paul