Работа с файлами в Perl.

Все функции и процедуры Perl для работы с файлами в качестве аргумента используют либо имя файла, либо файловую переменную. Файловая переменная - это специальный объект, посредством которого осуществляются операции с открытыми файлами. При запуске программы открытыми являются три файла: (STDIN - стандартный ввод, STDOUT - стандартный вывод, STDERR - стандартный вывод сообщений об ошибках). Чтобы открыть другой файл нужно использовать процедуру open, она предоставляет различные способы открытия файла:

open(файловая_переменная,"имя файла"); #открыть файл для чтения
open(файловая_переменная,">имя файла"); #открыть файл для записи
open(файловая_переменная,">>имя файла"); #открыть файл для записи в конец
open(файловая_переменная,"+<имя файла"); #открыть файл для чтения и записи
open(файловая_переменная,"|команда"); #направить информацию на вход программы
open(файловая_переменная,"команда|"); #считать информацию с выхода программы
open(файловая_переменная,"|команда|"); #и то и другое вместе

Открыв файл, иожно считать из него строку в скалярную переменную
$s=<FILE>

Чтобы избавиться от символа новой строки на конце используется функция chomp().

Если считать файл в списочную переменную, то получится список из строк файла от текущей и до конца.

Бинарный файл можно писать и читать функциями sysread() и syswrite:
sysread(файловая_переменная,$скалярная_переменная,кол-во_байт);
syswrite(файловая_переменная,$скалярная_переменная,кол-во_байт);
Эти функции соответсвенно читают и пишут блок указанного размера из файла, заданного файловой переменной, в скалярную переменную.

Чтобы закрыть файл существует процедура close() :
close(файловая_переменная);

В ниже следующей таблице приведены операции для работы с файлами. Их аргументами могут быть как файловые переменные, так и строки, представляющие имена файлов.

Операция

Описание

Пример использования

-r Файл доступен для чтения unless (-r "file") {print "Cannot read";}
-w Файл доступен для записи
-x Файл доступен для исполнения
-o Файл принадлежит пользователю if (-o "index.html") {chmod(0777,"index.html");}
-R Файл доступен для чтения реальному пользователю, а не только "эффективному"
-W Файл доступен реальному пользователю для записи
-X Файл доступен реальному пользователю для исполнения
-O Файл принадлежит реальному пользователю
-e Файл или каталог существует unless (-e $file) {open(f,$file);}
-z Файл существует, но имеет нулевую длину if (-z $file) {unlink($file);}
-s Размер файла в байтах print "Size of file is -s $file";
-f Файл существует и является простым файлом
-d Файл существует и является каталогом if (-d 'public_html') {chdir('public_html');}
-l Файл существует и является символической ссылкой
-p Файл существует и является каналом FIFO
-u Файл имеет бит установки пользователя
-g Файл имеет бит установки группы
-k У файла установлен sticky-бит
-t Файл является терминальным устройством
-M Время с последнего изменения файла (в днях) print -M $file
-A Время последнего доступа к файлу (в днях)
-C Время последнего изменения файлового индекса (в днях)