#!/usr/local/bin/perl ($#ARGV == 1) || die "usage: cmp.pl <file1> <file2>\n"; open(IN0,"<$ARGV[0]") || die "unable to open $ARGV[0]\n"; open(IN1,"<$ARGV[1]") || die "unable to open $ARGV[1]\n"; binmode IN0; binmode IN1; $tot=0; $ret=1; for (;;) { $n1=sysread(IN0,$b1,4096); $n2=sysread(IN1,$b2,4096); last if ($n1 != $n2); last if ($b1 ne $b2); last if ($n1 < 0); if ($n1 == 0) { $ret=0; last; } $tot+=$n1; } close(IN0); close(IN1); if ($ret) { printf STDERR "$ARGV[0] and $ARGV[1] are different\n"; @a1=unpack("C*",$b1); @a2=unpack("C*",$b2); for ($i=0; $i<=$#a1; $i++) { if ($a1[$i] ne $a2[$i]) { printf "%02X %02X <<\n",$a1[$i],$a2[$i]; last; } } $nm=$tot+$n1; $tot+=$i+1; printf STDERR "diff at char $tot of $nm\n"; } exit($ret);