На этом шаге мы рассмотрим функцию open().
Как мы уже знаем, для доступа к файлу из программы Perl необходим дескриптор. Дескриптор файла создается функцией open(), которая является списковой операцией Perl:
open ДЕСКРИПТОР, ИМЯ_ФАЙЛА; open ДЕСКРИПТОР;
При выполнении операции open с заданным в параметрах именем файла открывается соответствующий файл и создается дескриптор этого файла. В качестве дескриптора файла в функции open() можно использовать выражение - его значение и будет именем дескриптора. Имя файла задается непосредственно в виде строкового литерала или выражения, значением которого является строка. Операция open без имени файла открывает файл, имя которого содержится в скалярной переменной $ДЕСКРИПТОР, которая не может быть лексической переменной, определенной функцией my(). Следующий пример демонстрирует использование операции open() для открытия файлов.
#! perl -w $var = "out.dat"; $FILE4 = "file4.dat"; open FILE1, "in.dat"; # Имя файла задано строкой. open FILE2, $var; # Имя файла задано переменной. open FILE3, "/perlourbook/01/".$var; # Имя файла вычисляется в выражении. open FILE4; # Имя файла в переменной $FILE4.
Любой файл можно открыть в одном из следующих режимов:
Это осуществляется присоединением соответствующего префикса к имени файла:
Если префикс опущен, то по умолчанию файл открывается в режиме чтения. Запись информации в файл, открытый в режиме записи (префикс >), осуществляется в начало файла, что приводит к уничтожению содержащейся в нем до его открытия информации. Информация, содержащаяся в файле, открытом в режиме добавления (префикс >>), не уничтожается, новые записи добавляются в конец файла. Если при открытии файла в режиме записи или добавления не существует файла с указанным именем, то он создается, что отличает эти режимы открытия файла от режима чтения, при котором файл должен существовать. В противном случае операция открытия завершается с ошибкой и соответствующий дескриптор не создается.
Perl позволяет открыть файл еще в одном режиме - режиме чтения/записи. Для этого перед префиксом чтения <, записи > или добавления >> следует поставить знак плюс +. Отметим различия между тремя режимами чтения/записи +<, +> и +>>. Первый и третий режимы сохраняют содержимое открываемого файла, тогда как открытие файла с использованием второго режима (+>) сначала очищает содержимое открываемого файла. Третий режим отличается от первых двух тем, что запись в файл всегда осуществляется в конец содержимого файла.
На следующем шаге мы рассмотрим функцию sysopen().