Perl как создать файл

Обновлено: 05.07.2024

В Perl предусмотрен набор унарных операций, возвращающих значение только одного поля структуры индексного дескриптора. Эти операции в документации называются "операциями -X", так как их названия состоят из дефиса с последующим единственным символом. Все они являются унарными именованными операциями и имеют свой приоритет в сложных выражениях.

Полный перечень унарных операций проверки файлов

-r Файл может читаться эффективным uid/gid -w Записывать в файл может эффективный uid/gid -x Файл может выполняться эффективным uid/gid -o Владельцем файла является эффективный uid/gid -R Файл может читаться действительным uid/gid -W Записывать в файл может действительный uid/gid -X Файл может выполняться действительным uid/gid -O Владельцем файла является действительный uid/gid -e Файл существует -z Размер файла равен нулю -s Размер файла отличен от нуля (возвращает размер) -f Файл является обычным (plain) файлом -d Файл является каталогом -l Файл является символической ссылкой -p Файл является именованным програмным каналом (FIFO) или проверяемый дескриптор связан с програмным каналом -S Файл является сокетом -b Файл является специальным блочным файлом -c Файл является специальным символьным файлом -t Дескриптор файла связан с терминалом -u У файла установлен бит setuid -g У файла установлен бит setgid -k У файла установлен бит запрета (sticky bit) -T Файл является текстовым файлом -B Файл является двоичным (противоположным текстовому) -M Возраст файла в днях на момент выполнения программы -A То же для врмени последнего обращения к файлу -C То же для время последней модификации индексного дескриптора файла

Унарные операции применяются к строке, содержащей имя файла, к выражению, вычисляемым значением которого является имя файла, или к файловому дескриптору Perl. Если параметр операции не задан, то она тестирует файл, чье имя содержится в специальной переменной $_. Каждая операция проверки атрибута файла возвращает 1, если файл обладает соответствующим атрибутом, пустую строку "" в противном случае и неопределенное значение undef, если указанный в параметре файл не существует.

Несколько слов об алгоритме определения текстовых и двоичных файлов (операции -T и -B). Эти операции анализируют содержимое первого блока файла на наличие "странных" символов - необычных управляющих последовательностей или байтов с установленными старшими битами. Если обнаружено достаточно большое количество подобных символов (больше 30%), то файл считается двоичным, иначе текстовым. Любой файл с пустым первым блоком рассматривается как двоичный.

Если эти операции применяются к файловым дескрипторам Perl, то проверяется содержимое буфера ввода/вывода, а не первого блока файла. Обе эти операции, примененные к файловым дескрипторам, возвращают булево значение Истина, если связанный с дескриптором файл пуст или установлен на конец файла.

При выполнении унарных именованных операций проверки файла на самом деле неявно вызывается функция stat(), причем результаты ее вычисления кэшируются, что позволяет использовать специальный файловый дескриптор _ для ускорения множественных проверок файла:

chdir

Изменение текущего рабочего каталога на каталог, определяемый значением параметра ВЫРАЖЕНИЕ. Если параметр опущен, домашний каталог становится текущим. Возвращает бклево значение Истина в случае успешного выполнения операции замены текущего каталога и Ложь в противном случае.

chmod

Функция chmod() изменяет права доступа для файлов, представленных в списке, переданном ей в качестве параметра. Первым элементом этого списка должно быть трехзначное восьмеричное число, задающее права доступа для владельца, пользователей из группы, в которую входит владелец, и прочих пользователей. Каждая восьмеричная цифра определяет право на чтение файла, запись в файл и его выполнение (в случае если файл представляет выполняемую программу) для указанных выше групп пользователей. Установленные биты ее двоичного представления отражают соответствующие права доступа к файлу. Например, если установлены все три бита (восьмеричное число 7), то соответствующая группа пользователей обладает всеми перечисленными правами: может читать из файла, записывать в файл и выполнять его. Значение равное 6 определяет право на чтение и запись, 5 позволяет читать из файла, выполнять его, но не позволяет записывать в этот файл и т.д. Обычно не выполняемый файл создается с режимом доступа 0666 - все пользователи могут читать и записывать информацию в файл, выполняемый файл - с режимом 0777. Если владелец файла желает ограничить запись в файл пользователей не его группы, то следует выполнить следующий оператор:

Возвращаемым значением функции chmod(), как и функции chown(), является количество файлов из списка, для которых операция изменения прав доступа завершилась успешно.

В операционных системах DOS и Windows имеет значение только установка режимов доступа владельца.

chown

Любой пользователь, создавший собственный файл, считается его владельцем. Изменить владельца файла из сценария Perl можно функцией chown(). Параметром этой функции является список, первые два элемента которого должны представлять числовые идентификаторы uid и gid. Остальные элементы списка являются именами файлов, для которых изменяется владелец. Эта функция возвращает количество файлов, для которых операция изменения владельца и группы прошла успешно.

Изменить владельца файла может только сам владелец или суперпользователь (обычно системный администратор) системы UNIX. В операционных системах с файловой системой отличной от UNIX (DOS, Windows) эта функция отрабатывает, но ее установки не влияют на доступ к файлу.

chroot

Определяет новый корневой каталог для всех относительных (начинающихся с косой черты "/") имен файлов процесса пользователя и порожденных им процессов. Не меняет текущий рабочий каталог. В отсутствии параметра используется значение специальной переменной $_. Может вызываться только суперпользователем.

close

По завершению работы с файлом он закрывается функцией close(). Единственным необязательным параметром этой функции является дескриптор, ассоциированный с файлом.

Эта функция возвращает значение Истина, если успешно очищен буфер ввода/вывода и закрыт системный дескриптор файла. Вызванная без параметра, функция close закрывает файл, связанный с текущим дескриптором, установленным функцией select().

При возникновении ошибок закрытия файла их можно обнаружить применяя специальную переменную $!: close ( FILE ) or die "Ошибка закрытия файла: $!";

closedir

Закрывает каталог, ассоциированный с дескриптором каталога, заданным параметром ДЕСКРИПТОР. Возвращает булево значение Истина, если каталог успешно закрыт.

fcntl

Реализует системную команду Unix fcntl(2). Перед использованием следует получить доступ к определениям системных констант оператором use Fcntl.

Возвращаемое значение: если системная функция возвращает -1, то функция Perl - неопределенное значение; если системная функция возвращает 0, то функция Perl строку "0 but true"; если системная функция возвращает какое-либо другое значение, функция Perl возвращает это же значение.

Возвращает найденные в текущем каталоге файлы, имена которых удовлетворяют заданному шаблону (с использованием метасимволов Unix "*","?"). Значением выражения должна быть строка, содержащая шаблон имен файлов.

ioctl

Реализует системную команду Unix ioctl(2). Перед использованием следует получить доступ к определениям системных констант оператором require "ioctl.ph";

  • если системная функция возвращает -1, то функция Perl - неопределенное значение;
  • если системная функция возвращает 0, то функция Perl строку "0 but true";
  • если системная функция возвращает какое-либо другое значение, функция Perl возвращает это же значение.

Создает новую "жесткую" ссылку на файл, заданный параметром СТАРЫЙ. Возвращает булево значение Истина в случае успешного создания ссылки и Ложь в противном случае.

lstat

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

Используется для получения информации о символических ссылках. Возвращает список значений полей структуры индексного дескриптора самой ссылки, а не файла, на который она ссылается. Эта функция работает аналогично функции stat().

mkdir

Для доступа к файлу из программы Perl необходим дескриптор. Для создания дескриптора используется функция open(). При выполнении операции open с заданым в параметрах именем файла открывается соответствующий файл и создается дескриптор этого файла. В качестве дескриптора файла можно использовать выражение - его значение и будет именем дескриптора. Имя файла задается непосредственно в виде строкового литерала или выражения, значением которого является строка. Операция open без имени файла открывает файл, имя которого содержится в скалярной переменной $ДЕСКРИПТОР, которая не может быть лексической переменной, определенной функцией my().

Если задано не полное имя файла, то открывается файл с указанным именем и расположенный в том же каталоге, что и программа Perl. Можно задавать полное имя файла, однако следует иметь в виду, что оно зависит от используемой операйионной системы. Например, в Windows следует обязательно задавать имя диска: d:/perlbook/file1.doc

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

  • < (чтение)
  • > (запись)
  • >> (добавление)

Если префикс опущен, то по умолчанию файл открывается в режиме чтения.

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

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

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

Perl позволяет открыть файл еще в одном режиме - режиме чтения/записи.

Для этого перед префиксом чтения <, записи > или добавления >> следует поставить знак +.

  • +< - сохраняют содержимое открываемого файла
  • +> - сначало очищает содержимое открываемого файла
  • +>> - сохраняют содержимое открываемого файла, запись в файл всегда осуществляется в конец содержимого файла

opendir

Открытие каталога, имя которого равно значению параметра ВЫРАЖЕНИЕ, и связывает его с дескриптором, определяемым параметром ДЕСКРИПТОР. Имена дескрипторов каталогов хранаятся в собственном пространстве имен таблицы имен Perl.

readlink

rename

Переименовывает файл. Возвращает 1 в случае успешного переименования и 0 в противном случае.

В файловой структуре UNIX информация о файле храниться в его индексном дескрипторе (inode). Структура индексного дескриптора состоит из 13 полей, для которых используются специальные обозначения:

Поле Описание
dev Номер устройства в файловой системе
ino Номер индексного дескриптора
mode Режим файла (тип и права доступа)
nlink Количество жестких ссылок на файл (в отсутствии ссылок равно 1)
uid Числовой идентификатор владельца файла
gid Числовой идентификатор группы владельца файла
rdev Идентификатор устройства (только для специальных файлов)
size Размер файла в байтах
atime Время последнего обращения к файлу с начала эпохи
mtime Время последнего изменения файла с начала эпохи
ctime Время изменения индексного дескриптора с начала эпохи
blksize Предпочтительный размер блока для операций ввода/вывода
blocks Фактическое количество выделенных блоков для размещения файла

Начало эпохи датируется 1 января 1970 года 0 часов 0 минут.

Не все перечисленные поля структуры индексного дескриптора поддерживаются всеми файловыми системами.

Функция stat() предназначена для получения значений полей структуры индексного дескриптора файла. Ее единственным параметорм может быть либо имя файла, либо дескриптор открытого в программе файла. Она возвращает список из 13 элементов, содержащих значения полей структуры индексного дескриптора файла в том порядке, как они перечислены в таблице.

Типичное использование в программе Perl представлено ниже:

Присваивание значение полей списку скалярных переменных с идентификаторами, соответствующими названиям полей, способствует лучшей читаемости программы, чем присваивание массиву скаляров:

В последнем случае получить значение соответствующего поля можно только с помощью индекса, что не совсем удобно, так как нужно помнить номер нужного поля структуры.

Если при обращении к функции stat() не указан параметр, то она возвращает структуру индексного дескриптора файла, чье имя содержится в специальной переменной $_.

Функция получения информации о файле при успешном выполнении в списковом контексте возвращает список значений полей структуры индексного дескриптора файла или пустой список в случае неудачного завершения. В скалярном контексте она возвращает булево значение Истина или Ложь в зависимости от результатов своего выполнения.

Для удобства использования информации о файле функция stat() при успешном выполнении кэширует полученные значения полей. Если вызвать эту функцию со специальным дескриптором файла _ (символ подчеркивания), то она возвратит информацию, хранящуюся в кэше от предыдущего ее вызова. Это позволяет проверять различные атрибуты файла без повторного вызова функции stat() или сохранения результатов ее выполнения в переменных программы.

Функцию stat() можно использовать для получения структуры индексного дескриптора не только файла, но и жестких ссылок на него, а также каталогов, так как они являются также файлами, блоки данных которых содержат имена файлов каталога и их числовых индексных дескрипторов.

symlink

Создание символической ссылки (параметр НОВОЕ_ИМЯ) на файл (параметр СТАРОЕ_ИМЯ). Возвращает 1 в случае успешного создания символической ссылки и 0 в противном случае.

umask

Устанавливает маску режима доступа процесса, заданную значением параметра ВЫРАЖЕНИЕ (восьмеричное число), и возвращает предыдущее значение маски режима доступа.

unlink

Удаление файлов, определенных параметром СПИСОК. Возвращает количество успешно удаленных файлов.

utime

В структуре индексного дескриптора файла существует три поля, в которых храниться время последнего обращения (atime) к файлу, его изменения (mtime) файла и изменения индексного дескриптора (ctime). Функцией utime() можно изменить время последнего обращения и модификации файла. Ее параметром является список, содержащий имена обрабатываемых файлов, причем первые два элемента списка - числовые значения нового времени последнего доступа и модификации:

В этом фрагменте кода время последнего доступа и модификации файлов из списка @files изменяется на текущее время, полученное с помощью функции time.

Отметим, что при выполнении функции utime() изменяется и время последней модификации индексного дескриптора (ctime) - оно устанавливается равным текущему времени. Возвращаемым значением является количество файлов, для которых операция изменения времени последнего доступа и модификации прошла успешно.

О том, что такое файл писать я надеюсь ненужно, но думаю нужно подумать над тем, что с ними можно делать, как видно из заголовка статьи, на Perl. Ну, приступим .

В этой статье обсудим:

Что такое файловые манипуляторы, и с чем их едят

Доступ к файлам осуществляется с помощью файловых манипуляторов, которые представляют собой так сказать синоним файла. Они не являются переменными, а поэтому их нельзя непосредственно присваивать другим переменным или передавать в функции (для этого нужно, что называется, пойти другим путем).

Есть и стандартные Перловские файловые манипуляторы. Они называются STDIN (стандартный ввод), STDOUT (стандартный вывод) и STDERR (стандартный поток ошибок). Например параметры скрипту из формы передаются именно через STDIN (при условии использования метода POST).

Если понадобится создать копию файлового манипулятора (не файла, а только манипулятора по которому осуществляется доступ к файлу), то можно воспользоваться функцией open (о ней подробнее поговорим позже).

О присваивании переменным файловых манипуляторов:

И под конец скажу, что файловые манипуляторы в Perl используются не только для связи с, собственно, файлом. Они могут быть связаны с каким-нибудь процессом, сокетом и т.д. Но это не входит в тематику статьи.

Манипуляции с файлом

Открытие файла осуществляется функцией open.

Разберемся. У функции три параметра: FFF - название файлового манипулятора (его задаете вы), режим доступа ">" и "file.txt" - имя нужного вам файла. Есть три основных режима: ">" - запись,"<"- чтение, ">>"- добавление в файл.

Есть еще функция sysopen. Работа с ней не на много сложнее, чем с open, зато с ее помощью вы сможете более детально "сказать" системе о ваших намерениях (то есть то, что вы хотите сделать с файлом).

В sysopen три обязательных параметра и один необязательный.

FH - собственно, файловый манипулятор, $name - имя файла в чистом виде (без ">" и др.). В $flags помещаем число, полученное объединением нижеописанных констант через OR ( | ):

O_RDONLY Только для чтения
O_WRONLY Только для записи
O_RDWR Для чтения и для записи
O_CREAT Если файла нет, создать!
O_APPEND Открытие в режиме присоединения
O_TRUNC Очищаем содержимое при открытии

Это, конечно, не полный перечень, но здесь перечислены самые необходимые и часто используемые константы.

И наконец $param. Этот параметр задает маску доступа к файлу и записывается в восьмеричной системе. Обычно используется значение 0666 (значение по умолчанию, то есть если $param опущен), или 0777. Первое значение используется для обычных файлов, второе же для каталогов и исполняемых файлов.

Пример открытия файла для записи (если не найден - создается):

Запись в файл делаем функцией print.

Здесь FFF - имя файлового манипулятора, а строка в кавычках - текст, который мы хотим записать в файл, ассоциированный с FFF.

Если до попытки открытия файла не существовало, то функция open его создаст, а если файл был, и он был не пустой, то после вышеуказанной функции print, в нем ничего не останется от предыдущей информации, а записана будет та ерунда, которую я там вписал.

Как уже было сказано, существуют три стандартных файловых манипулятора, и при опущенном файловом манипуляторе функция print осуществит вывод в STDOUT (то же относится к функциям printf и write). Чтобы изменить направление вывода в Perl предусмотрена функция select (правда не только для этого). Пример:

Закрываем файл функцией close.

Принцип убирать за собой прививается всем с детства. Давайте не забывать об этом и в программировании, хотя при завершении процесса, в котором был открыт данный файл, файл закрывается автоматически.

Во-первых для чего? А для того, что если несколько процессов хотят одновременно заполучить доступ к файлу, причем на запись, причем еще и хотят туда что-то писать (кошмар), то представьте, что оказалось бы, если не этот чудный механизм блокировки. Он позволяет, грубо говоря, ставить процессы в очередь. Делаем так:

О функциях open и close уже говорили, а на flock остановимся немного подробнее. Она получает два параметра - файловый манипулятор и, образно говоря, категорию блокировки.

Про снятие блокировки: блокировка автоматически снимается при завершении процесса, вызванного текущим скриптом, либо при закрытии файлового манипулятора, который "привязан" к заблокированному файлу. Если вы снимаете блокировку вручную, будьте аккуратны - вы даете возможность другому процессу делать с (ВНИМАНИЕ!) не закрытым вами файлом все что ему угодно! Последствия могут быть, мягко говоря, неприятные, а грубо говоря - непредсказуемые (для вас непредсказуемые).

Работа со строками в файле

Так как именно те файлы, которые содержат строковую информацию составляют наибольший интерес для, собственно, человека, то и речь сейчас пойдет именно о них.

Для чтения строк из файла используется файловый манипулятор "поставленный" в <>.

Если не указано иначе, то внутри такого цикла используется стандартная переменная "$_", а номер строки записывается в "$.". Так как конец строки обозначается спецсимволом, например "\n", для получения самой строки (без эдакого "хвоста") нужно ее усечь функцией chomp.

Можно прочитать строки в массив:

Для передвижения по файлу используются функции tell и seek.

Функция tell принимает в качестве параметра файловый манипулятор, а seek берет три параметра. Первый - файловый манипулятор, второй - смещение в байтах, третий - направление смещение. Есть три направления смещения: 0 - от начала файла, 1 - от текущей позиции, 2 - с конца файла.

Нельзя сказать, что это все, что нам предлагает Perl для работы с файлами. Будем надеяться, что у меня будет время на то, чтобы написать о том, как работать с каталогами, тонкости при работе с бинарными файлами, объектно-ориентированный подход к управлению файлами и их содержимым.

Для записи в файл он открывается в режиме записи, как показано ниже:

Если файл существует, он усекает старое содержимое файла с новым содержимым. В противном случае будет создан новый файл и добавлено содержимое.

функция print ()

Функция print () используется для записи содержимого в файл.

Syntax: print filehandle string

Здесь дескриптор файла связан с файлом во время открытия файла, а строка содержит содержимое, которое должно быть записано в файл.

Пример :

open (fh, ">" , "Hello.txt" );

print "Enter the content to be added\n" ;

close (fh) or "Couldn't close the file" ;


Перед записью в файл:


Выполнение кода для записи:


Обновленный файл:

Вот как работает программа:
Шаг 1: Открытие файла Hello.txt в режиме записи.
Шаг 2: Получение текста со стандартной клавиатуры ввода.
Шаг 3: Запись строки, хранящейся в $ a, в файл, указанный в дескрипторе файла fh
Шаг 4: Закрытие файла.

Копирование содержимого из одного файла в другой:

Перед выполнением кода:
Исходный файл:

Файл назначения:

Пример :
Пример ниже считывает содержимое из исходного файла и записывает его в конечный файл.

print ( "Copying content from $src to $des\n" );

print "File content copied successfully!\n" ;


Выполнение кода:


Обновленный файл назначения:

Вот как работает программа:
Шаг 1: Открытие 2 файлов Source.txt в режиме чтения и Destination.txt в режиме записи.
Шаг 2: Чтение содержимого из FHR, который является файловым дескриптором для чтения содержимого, в то время как FHW является файловым дескриптором для записи содержимого в файл.
Шаг 3: Копирование содержимого с использованием функции печати.
Шаг 4: Закройте conn, как только чтение файла будет завершено.

Обработка ошибок и отчеты об ошибках

Есть два способа обработки ошибок

  • Создайте исключение, если файл не может быть открыт (Обработка ошибки)
  • Выдать предупреждение, если файл не может быть открыт и продолжен (Отчет об ошибках)

open (fh, '<' , $filename ) or

die "Couldn't Open file $filename" ;


В приведенном выше коде, когда File существует, он просто выполняется без ошибок, но если файл не существует, он генерирует ошибку и код завершается.

if ( open (fh, '<' , $filename ))

warn "Couldn't Open a file $filename" ;


Когда файл существует:


Когда Файл не существует:

Многие Perl-программисты имеют дело с текстовыми файлами, такими как конфиги или лог-файлы, поэтому, чтобы получить некоторые полезные знания, важно как можно раньше научиться работать с файлами.

Для начала давайте узнаем, как записывать данные в файл, так как это кажется наиболее простой задачей.

Прежде чем записывать в файл, нужно открыть его, то есть попросить операционную систему (Windows, Linux, OSX и т. д.) открыть канал, по которому ваша программа сможет "общаться" с файлом. Для этого в Perl есть функция

Это хороший рабочий пример и мы к нему еще вернемся, но сперва давайте попробуем пример попроще:

Простой пример

Здесь тоже нужны кое-какие объяснения. Функция open принимает 3 параметра.

Первый, $fh , это скалярная переменная, которую мы объясляем в вызове open() . Мы могли бы объявить ее раньше, но обычно проще объявить ее прямо в вызове, хотя на первый взгляд это может выглядеть немного странно. Второй параметр определяет, каким образом мы открываем файл. В данном случае мы поставили знак "больше" ( > ), что значит, что файл открывается для записи. Третий параметр - путь к файлу, который мы хотим открыть.

Когда эта функция вызывается, она присваивает переменной $fh специальный ключ, который называется указателем файла (file-handle). Нам не важно само содержимое этой переменной; в дальнейшем мы просто используем ее. Главное, обратите внимание, что содержимое файла по-прежнему находится на диске, и НЕ попадает в переменную $fh.

Когда файл открыт, мы можем использовать указатель $fh в выражении print() . Это выглядит почти так же, как print() в других частях нашего учебника, но в качестве первого параметра мы передаем указатель файла, и после него нет(!) запятой.

Этот вызов print() запишет текст в наш файл.

Затем в следующей строчке мы закрываем указатель на файл. Строго говоря, в Perl это не обязательно. Perl автоматически и корректно закроет все файловые указатели, когда переменная покинет область видимости, то есть, в крайнем случае, когда скрипт завершится. Но, так или иначе, явно закрывать файлы считается хорошей практикой.

Последняя строчка print "done\n" нужна только для того, чтобы пояснить следующий пример:

Обработка ошибок

Давайте возьмем предыдущий пример и заменим имя файла на несуществующий путь. Например:

На самом деле, это просто предупреждение; скрипт продолжает выполняться, и поэтому мы увидим на экране слово "готово".

Более того, мы увидим предупреждение только потому, что явно запросили отображение предупреждений с помощью выражения use warnings . Попробуем закомментировать use warnings и увидим, что теперь скрипт молчит при неудачной попытке открыть файл. Так что вы даже не заметите этого, пока клиент, или, хуже того, ваш начальник, начнет жаловаться.

В любом случае, налицо проблема. Мы попытались открыть файл. Это не получилось, но мы все равно пытались туда что-то записать.

Лучше бы нам проверить, успешно ли сработал open() , прежде чем продолжать.

К счастью, вызов open() сам по себе возвращает TRUE в случае успеха и FALSE при отказе, так что мы можем сделать так:

Открой или умри (open or die)

Это "стандартная идиома" open or die. Очень часто встречается в Perl.

die - это вызов функции, которая бросит исключение и таким образом завершит наш скрипт.

"open or die" это логическое выражение. Как вы знаете из предыдущей части учебника, "or" в Perl (как и во многих других языках) сокращается. Это значит, что если левая часть вернет TRUE, сразу понятно, что все выражение будет равно TRUE, так что правая часть вообще не выполняется. С другой стороны, если левая часть вернет FALSE, то правая часть выполнится, и результат ее выполнения и будет результатом всего выражения.

В данном случае мы используем эту особенность сокращения в нашеи выражении.

Если open() выполнится успешно, он вернет TRUE, и правая часть так и не выполнится. Скрипт просто перейдет к следующей строчке.

Если же open() не выполнится, он вернет FALSE. Тогда выражение справа от or тоже выполняется. Это приводит к исключению, и скрипт завершается.

В этом примере мы не проверяем итогового значения логического выражения, оно нам не нужно. Мы использовали это выражение только ради "побочного эффекта".

и НЕ увидим "готово".

Вместо того, чтобы просто вызвать die без параметра, можно добавить некоторое объяснение того, что же произошло.

Так-то лучше, но в какой-то момент кто-нибудь попробует поменять путь на корректную директорию.

Так что будет лучше использовать в качестве названия файла переменную:

Этот код выдаст

Так гораздо лучше.

Ну а теперь вернемся к исходному примеру.

Больше?

Знак "больше" в вызове open может показаться непонятным, но если вы знакомы с перенаправлениями в командной строке, вы поймете, что он значит. А если нет, просто представьте, что это стрелка, показывающая направление потока данных: в файл справа.

Не латиница?

Если вам нужно работать с символами, не входящими в таблицу ASCII, вам стоит сохранять их в UTF-8. Чтобы это сделать, нужно сообщить Perl'у, что вы открываете файл в кодировке UTF-8.

Читайте также: