Поиск

Вопросы и ответы

Мой оператор open не работает по неизвестной причине. Что могло произойти?

Во-первых, проверьте синтаксис выражения с функцией open. Убедитесь, что правильно указано имя файла. Можете даже вывести это имя, перед тем как использовать его в open. Если вы собираетесь использовать файл для записи, не забудьте поставить префикс > перед именем файла, это необходимо. А проверяли ли вы, как выполнилась операция открытия файла с помощью синтаксиса open() j| die "$!";?. Сообщение функции die может сильно облегчить поиск ошибки.

Я выводил данные в файл, но их там не оказалось. Куда делись мои данные?

А вы уверены, что файл открыт правильно? Если вы используете неправильное имя файла, данные могут оказаться не в том файле, в каком вы ожидали. Распространенной ошибкой является использование символов обратной косой черты в пути файла, если путь заключен в двойные кавычки:

В этой строке создается файл с: (табулятор)еmp(новая стpoкa)otes.txt. Это явно не то, что нужно. Убедитесь также в успешном выполнении функции open. При отключенном режиме выдачи предупреждений Perl "молча" отбрасывает данные, выводимые в файл, который не был успешно открыт.

Я пытался открыть файл с помощью функции open, но получил сообщение permission denied. В чем тут дело?

Perl лишь следует правилам, регламентирующим безопасность в данной операционной системе. Если у вас нет права доступа к соответствующему файлу, каталогу или диску, то Perl ничего не может с этим поделать.

Как организовать посимвольный ввод данных?

Для посимвольного ввода из файла используется функция getc. Посимвольный ввод с клавиатуры — гораздо более серьезный вопрос, требующий учета особенностей конкретной операционной системы. После знакомства с модулями Perl на 15-м занятии, "Обработка данных в Perl" и чтения FAQ, речь о котором пойдет в 16-м занятии, "Сообщество Perl", посмотрите пятый раздел FAQ. В нем содержится развернутое объяснение принципов организации посимвольного ввода для различных платформ с многочисленными примерами кода. В этой книге мы не можем их привести.

Как избежать одновременной записи в один и тот же файл со стороны различных программ?

Перед записью нужно выполнить блокировку файла. Более подробно эта тема обсуждается на 15-м занятии, "Обработка данных в Perl". Предупреждаем, это довольно сложный вопрос!