Perl: описатели файлов |
![]() |
Добавил(а) microsin | ||||||
Описатели файлов (filehandles), строго говоря, не являются типом данных; это особый вид строковых констант. Однако, они во многом ведут себя так же, как переменные, поэтому мы описываем их в этой статье. Описатели файлов создаются встроенной функцией open() и обеспечивают ввод-вывод файлов, например: open INFO, "datafile" or die "Не могу открыть файл: $!"; Описатели файлов (как INFO в этом примере) принято записывать прописными буквами. PERL поддерживает три системных описателя файлов, которые создаются при запуске программы:
Для чтения данных из файла существует специальная операция < описатель >, в скалярном контексте возвращающая очередную запись файла или undef в конце файла или при ошибке чтения. Обычно записью является строка, но мы можем изменить символ конца записи, присвоив его специальной переменной $/. В любом случае возвращаемая строка содержит в конце разделитель записей. Мы можем присвоить результат этой операции любой переменной; если же операция вызвана без присваивания, то ее результат заносится в специальную переменную $_. Следующий пример читает строки из файла MYFILE.DAT и выводит их на консоль: open INFO, "myfile.dat" or die "Не могу открыть файл: $!"; while (< INFO >) { print; } В контексте списка эта операция считывает файл целиком и возвращает его содержимое как массив записей. Поэтому предыдущий пример можно записать так: open INFO, "myfile.dat" or die "Не могу открыть файл: $!"; @f = < INFO >; print @f; Операция < описатель > является сокращением для readline(*описатель). Существует особая "пустая операция" <>, которая читает либо стандартный файл ввода, либо последовательно все файлы, перечисленные в командной строке. При первом вызове операции <> PERL проверяет специальный массив @ARGV, содержащий список аргументов командной строки, и, если он пуст, заносит в $ARGV[0] строку "-", т. е. указатель на STDIN. Каждый последующий вызов <> возвращает очередную запись текущего файла, указанного в командной строке; если файл считан полностью, то открывается следующий файл, указанный в командной строке, и возвращается его первая запись. Для проверки того, что все файлы считаны, используется встроенная функция eof(). Для вывода данных в файл обычно используется функция print(), например: print INFO "Моя строка"; [Ссылки] |