#!/usr/bin/perl # use Algorithm::Diff qw(diff); my $file1 = '/file1.txt'; my $file2 = '/file2.txt'; -T $file1 or bag("$file1: binary"); -T $file2 or bag("$file2: binary"); open (F1, $file1) or bag("Couldn't open $file1: $!"); open (F2, $file2) or bag("Couldn't open $file2: $!"); chomp(@f1 = ); close F1; chomp(@f2 = ); close F2; $diffs = diff(\@f1, \@f2); exit 0 unless @$diffs; my @f11; my $lineno = 0; foreach (@f1) { push @f11, [' ', $lineno, $_]; $lineno++; } my @f22; $lineno = 0; foreach (@f2) { push @f22, [' ', $lineno, $_]; $lineno++; } foreach $chunk (@$diffs) { foreach $line (@$chunk) { my $i = 0; my ($sign, $lineno, $text) = @$line; foreach (@f11) { if ($_->[1] eq $lineno) { if ($sign eq '+') { splice @f11, $i, 0, ['+', $lineno, ' ']; splice @f11, $i, 1, ['+', $lineno, $text]; last; } elsif ($sign eq '-') { splice @f11, $i, 1, ['-', $lineno, $text]; last; } } $i++ } } } my $cnt = 1; foreach (@f11) { print "$cnt: $_->[2]\n"; $cnt++; }