マージする2つのファイルは、1回のパスで読み込むことができ、別々のソースファイルとして扱う必要はありません。これにより、<>
を使用して、コマンドラインでパラメータとして渡されたすべてのファイルを読み取ることができます。
A.ini
のバックアップコピーを保存することは、マージされたデータを同じ名前の新しいファイルに書き込む前に名前を変更するだけです。
このプログラムは、必要な処理を行っているようです。 (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=123abc
b=xyx
c=434
m=shank
n=paul
が親切に問題を投稿する前にあなたの努力を入れて... – Anil