Сравнение файлов на perl

Результат работы программы:
файлы «text1.txt» и «text2.txt» различаются

code: #perl
  1. #!/usr/bin/perl
  2.  
  3. use warnings;
  4.  
  5. sub compareFiles($$;$)
  6. {
  7.     my $name1=shift;
  8.     my $name2=shift;
  9.     my $bufferSize=shift // 512;
  10.     unless(open $file1, '<', $name1)
  11.     {
  12.         warn "$0: Невозможно открыть «$name1»: $!\n";
  13.         return;
  14.     }
  15.     unless(open $file2, '<', $name2)
  16.     {
  17.         warn "$0: Невозможно открыть «$name2»: $!\n";
  18.         close $file1 or warn "$0: Невозможно закрыть «$name1»: $!";
  19.         return;
  20.     }
  21.     my($buffer1, $buffer2);
  22.     my $result=0;
  23.     while()
  24.     {
  25.         my $n1=read $file1, $buffer1, $bufferSize;
  26.         unless(defined $n1)
  27.         {
  28.             warn "$0: Невозможно прочитать «$name1»: $!\n";
  29.             undef $result;
  30.             last;
  31.         }
  32.         my $n2=read $file2, $buffer2, $bufferSize;
  33.         unless(defined $n2)
  34.         {
  35.             warn "$0: Невозможно прочитать «$name2»: $!\n";
  36.             undef $result;
  37.             last;
  38.         }
  39.         last unless $n1 or $n2;
  40.         if($buffer1 ne $buffer2)
  41.         {
  42.             $result=1;
  43.             last;
  44.         }
  45.     }
  46.     close $file2 or warn "$0: Невозможно закрыть «$name2»: $!";
  47.     close $file1 or warn "$0: Невозможно закрыть «$name1»: $!";
  48.     return $result;
  49. }
  50.  
  51. if(@ARGV==2)
  52. {
  53.     print "Файлы «$ARGV[0]» и «$ARGV[1]» различаются\n"
  54.         if compareFiles($ARGV[0], $ARGV[1]);
  55. }
  56. else
  57. {
  58.     warn "$0: Требуется ровно два параметра в командной строке\n";
  59. }
Поделиться:

Похожие статьи: