Perl: описатели файлов Печать
Добавил(а) microsin   

Описатели файлов (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(), например:

print INFO "Моя строка";

[Ссылки]

1. Книги по DHTML, Java.