Почему я получаю «Bad File Descriptor» при попытке прочитать файл с помощью Perl? - PullRequest
1 голос
/ 28 апреля 2010

Я пытаюсь прочитать двоичный файл по 40 байтов за раз, а затем проверить, все ли байты имеют размер 0x00, и если так, игнорировать их. Если нет, он запишет их обратно в другой файл (в основном, просто вырезая большие блоки нулевых байтов).

Возможно, это не самый эффективный способ сделать это, но меня это не беспокоит. Однако сейчас я получаю сообщение об ошибке «Bad File Descriptor» и не могу понять, почему.

my $comp = "\x00" * 40;
my $byte_count = 0;

my $infile = "/home/magicked/image1";
my $outfile = "/home/magicked/image1_short";

open IN, "<$infile";
open OUT, ">$outfile";
binmode IN;
binmode OUT;
my ($buf, $data, $n);
while (read (IN, $buf, 40)) { ### Problem is here ###
  $boo = 1;
  for ($i = 0; $i < 40; $i++) {
    if ($comp[$i] != $buf[$i]) {
      $i = 40;
      print OUT $buf;
      $byte_count += 40;
    }
  }
}
die "Problems! $!\n" if $!;

close OUT;
close IN;

Я пометил комментарием, где он ломается. Спасибо за любую помощь!

1 Ответ

5 голосов
/ 28 апреля 2010

Вы можете проверить, если open не возвращает ошибку.

open IN, "<$infile" or die "Can't open $infile: $!";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...