Здравствуйте.
Имеется вот такой код на Perl (Perl 5.10), который читает файл по строкам и чего-то там с ним делает:
open my $handle, "<","$filename" or die;
my $lineno = 1;
for (;;) {
undef $!;
my $line = <$handle>;
die $! if $!;#почему-то тут происходит сбой с диагнозом "Bad file descriptor"
# здесь обработка строки
......................
$lineno++;
}
Просто тупо взял из документации и доработал для своих целей. Но вот в одном месте (см. листинг) происходит сбой — скрипт вылетает с сообщением "Bad file descriptor". Если там закомментировать — все отлично работает. Не пойму, в чем дело.
З.Ы. Уважаемые любители по каждому поводу флеймить "Ты сам тупой, читай доки или ВОН ИЗ ПРОФЕССИИ!" — верите, нет, надоели. Доки я первым делом стал читать и объяснения не нашел. Если можете в двух словах объяснить или дать ссылку на документ — буду рад, если нет — пожалуйста, не разводите оффтоп. Благодарю за понимание.
Re: Perl: чтение из файла
От:
Аноним
Дата:
04.02.09 07:36
Оценка:
Да, забыл добавить, при обработке строки сразу идет:
last unless (defined($line));
чтобы, понятное дело, выйти из цикла когда весь файл просмотрен.
Здравствуйте, Аноним, Вы писали:
A>>Нет, правильное решение — подобрать значения переменных окружения PERLIO и CHUNKSIZE. А>У меня Win, и вообще нет такой переменной окружения PERLIO. Во всяком случае консольная команда set ее не распознает.
Я не разбирался подробно, но там какая-то ошибка в PerlIO layers. И игры с PERLIO — можно признать хаком.
Переменную окружения нужно устанавливать самому. У меня для ActiveState Perl 5.10.0 заработало PERLIO=perlio. Можно сделать это при открытии файла функцией open().
OK, спасибо. Вот еще вопросик: хочу проверить процедуру, которая обрабатывает текстовый файл. Читал, что можно использовать секцию DATA, как встроенный в исходник с тестами файл. Если я пишу:
my $x=<DATA>;
это срабатывает, но если вот так:
sub scan_file {
my $handle = shift;
for (;;) {
my $line = <$handle>;
# построчная обработка
.....
}
ok(scan_file(DATA),'result=0');
То вылетает с ошибкой: Bareword "DATA" not allowed while "strict subs" in use
А как сделать? Использовать отдельный тестовый файл? Или есть какой-то способ?
Здравствуйте, Аноним, Вы писали:
А>То вылетает с ошибкой: Bareword "DATA" not allowed while "strict subs" in use А>А как сделать? Использовать отдельный тестовый файл? Или есть какой-то способ?
В кавычки слово DATA.
Re[8]: Perl: чтение из файла
От:
Аноним
Дата:
04.02.09 15:19
Оценка:
Здравствуйте, anonymous, Вы писали:
A>В кавычки слово DATA.
Все заработало. Хотя и не понимаю, почему — в туториалах такие вещи не пишут, а если пишут, то фиг еще найдешь. Я например не мог найти. Спасибо.