文書の差分の取得
Algorithm::Diffを使うと簡単です。
use Algorithm::Diff;
my @doc1 = qw(
123
345
456
abc
ABC
666
777
888
999
);
my @doc2 = qw(
123
456
aBc
ABC
555
666
777
9999
000
);
print "==================== [sdiff]\n";
my @sdiffs = Algorithm::Diff::sdiff(\@doc1, \@doc2);
foreach my $diff (@sdiffs) {
my $op = $diff->[0];
my $dat1 = $diff->[1];
my $dat2 = $diff->[2];
printf "%s %5s %5s\n", $op, $dat1, $dat2;
}
print "==================== [diff]\n";
my @diffs = Algorithm::Diff::diff(\@doc1, \@doc2);
foreach my $chunk (@diffs) {
foreach my $diff (@$chunk) {
my $op = $diff->[0];
my $num = $diff->[1];
my $dat = $diff->[2];
printf "%s %d %s\n", $op, $num, $dat;
}
print "----------\n";
}
以下は実行結果です。
==================== [sdiff] u 123 123 - 345 u 456 456 c abc aBc u ABC ABC + 555 u 666 666 u 777 777 c 888 9999 c 999 000 ==================== [diff] - 1 345 ---------- - 3 abc + 2 aBc ---------- + 4 555 ---------- - 7 888 + 7 9999 - 8 999 + 8 000 ----------