#!C:\perl\bin\perl.exe # file_compare.pl # Purpose: compare two files and show differences use strict; use warnings; my $file1 ='E:\files\file_1.txt' or die "filename missing \n"; my $file2 = 'E:\files\file_2.txt' or die "filename missing \n"; open (FILE1, "< $file1") or die "Can not read file $file1: $! \n"; my @file1_contents = ; # read entire contents of file close (FILE1); open (FILE2, "< $file2") or die "Can not read file $file2: $! \n"; my @file2_contents = ; # read entire contents of file close (FILE2); my $length1 = $#file1_contents; # number of lines in first file my $length2 = $#file2_contents; # number of lines in second file if ($length1 > $length2) { # first file contains more lines than second file my $counter2 = 0; foreach my $line_file1 (@file1_contents) { chomp ($line_file1); if (defined ($file2_contents[$counter2])) { # line exists in second file chomp (my $line_file2 = $file2_contents[$counter2]); if ($line_file1 ne $line_file2) { print "\nline " . ($counter2 + 1) . " \n"; print "< $line_file1 \n" if ($line_file1 ne ""); print "--- \n"; print "> $line_file2 \n\n" if ($line_file2 ne ""); } } else { # there is no line in second file print "\nline " . ($counter2 + 1) . " \n"; print "< $line_file1 \n" if ($line_file1 ne ""); print "--- \n"; print "> \n"; # this line does not exist in file2 } $counter2++; # point to the next line in file2 } } else { # second file contains more lines than first file # or both have equal number of lines my $counter1 = 0; foreach my $line_file2 (@file2_contents) { chomp ($line_file2); if (defined ($file1_contents[$counter1])) { # line exists in first file chomp (my $line_file1 = $file1_contents[$counter1]); if ($line_file1 ne $line_file2) { print "\nline " . ($counter1 + 1) . " \n"; print "< $line_file1 \n" if ($line_file1 ne ""); print "--- \n"; print "> $line_file2 \n" if ($line_file2 ne ""); } } else { # there is no line in first file print "\nline " . ($counter1 + 1) . " \n"; print "< \n"; # this line does not exist in file1 print "--- \n"; print "> $line_file2 \n" if ($line_file2 ne ""); } $counter1++; # point to next line in file1 } }