Описатели файлов (filehandles), строго говоря, не являются типом данных; это особый вид строковых констант. Однако, они во многом ведут себя так же, как переменные, поэтому мы описываем их в этой статье.
Описатели файлов создаются встроенной функцией open() и обеспечивают ввод-вывод файлов, например:
open INFO, "datafile" or die "Не могу открыть файл: $!";
Описатели файлов (как INFO в этом примере) принято записывать прописными буквами. PERL поддерживает три системных описателя файлов, которые создаются при запуске программы:
STDIN |
Стандартный файл ввода (по умолчанию, клавиатура). |
STDOUT |
Стандартный файл вывода (по умолчанию, консоль; в Веб-приложениях обычно окно обозревателя). |
STDERR |
Стандартный файл вывода сообщений об ошибках (по умолчанию, консоль; в серверных Веб-приложениях обычно файл протокола ошибок). |
Для чтения данных из файла существует специальная операция < описатель >, в скалярном контексте возвращающая очередную запись файла или 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(), например:
[Ссылки]
1. Книги по DHTML, Java. |