#! perl -slw use strict; die "Files differ in length" unless -s( $ARGV[0] ) == -s( $ARGV[ 0 ] ); open FH1, '<', $ARGV[0] or die $!; open FH2, '<', $ARGV[1] or die $!; #my $mismatch = 0; until( eof( FH1 ) || eof( FH2 ) ) { my $line1 = ; my $line2 = ; next if $line1 eq $line2; my @line1 = split ' ', $line1; my @line2 = split ' ', $line2; for ( 0 .. $#line1 ) { next if $line1[ $_ ] eq $line2[ $_ ]; next if abs( chop( $line1[ $_ ] ) - chop( $line2[ $_ ] ) ) < 2 and $line1[ $_ ] eq $line2[ $_ ]; die "Files differ at line: $. field: $_\n"; #$mismatch = 1; } } #die "File are different\n" if $mismatch; die "Files have different numbers of lines\n" unless eof( FH1 ) and eof( FH2 ); print "Files are the same\n"; ### Or "files are sufficiently similar" close FH1; close FH2; #### C:\test>828506 file1 file2 Files are the same