Теперь вы знаете, как открыть дескриптор файла для вывода, уничтожив существующий файл с таким же именем. Предположим, вы хотите удостовериться, что файла с таким именем не существует (чтобы избежать случайного уничтожения своей электронной таблицы или очень важного календаря дней рождений). Если бы вы писали сценарий shell, вы использовали бы для проверки существования файла нечто вроде -е имя_фаила. Аналогичным образом в Perl применяется операция -е $filevar,
которая проверяет факт существования файла, заданного в скалярной переменной $filevar.
Если этот файл существует, результат — "истина"; в противном случае операция дает "ложь"**. Например:
$name = "index.html";
if (-e $name) (
print "I see you already have a file named $name\n";
} else (
print "Perhaps you'd like to make a file called $name\n";
}
* Хотя при наличии модуля File:: Copy этот способ оказывается лишним.
** Это не совсем хорошо, если вы работаете с lock-файлами или если файлы часто появляются и исчезают. В этом случае вам нужно обратиться к функциям sysopen и flock, которые описаны в книге Programming Perl, или изучить примеры, приведенные в главе 19.
Операнд операции -е — любое скалярное выражение, вычисление которого дает некоторую строку, включая строковый литерал. Вот пример, в котором проверяется наличие файлов index-html и index.cgi
в текущем каталоге:
if (-е "index.html" && -е "index.cgi") (
print "You have both styles of index files here.\n";
1
Существуют и другие операции. Например, -r $filevar возвращает значение "истина", если заданный в $filevar
файл существует и может быть прочитан. Операция -w $filevar проверяет возможность записи в файл. В следующем примере файл с заданным пользователем именем проверяется на возможность чтения и записи:
print "where? ";
$filename “ <STDIN>;
chomp $filename; # выбросить этот надоедливый символ новой строки if (-r $filename &S -w $filename) (
| Обозначение | Описание |
| -r | Файл или каталог доступен для чтения |
| -w | Файл или каталог доступен для записи |
| -X | Файл или каталог доступен для выполнения |
| -о | Файл или каталог принадлежит владельцу |
| -R | Файл или каталог доступен для чтения реальным пользователем, но не "эффективным" пользователем (отличается от -r для программ с установленным битом смены идентификатора пользователя) |
| -W | Файл или каталог доступен для записи реальным пользователем, но не "эффективным" пользователем (отличается от -w для программ с установленным битом смены идентификатора пользователя) |
| -X | Файл или каталог доступен для выполнения реальным пользователем, но не "эффективным" пользователем (отличается от -х для программ с установленным битом смены идентификатора пользователя) |
| -0 | Файл или каталог принадлежит реальному пользователю, но не "эффективному"пользователю (отличается от -о для программ с установленным битом смены идентификатора пользователя) |
| Обозначение | Описание |
| -е | Файл или каталог существует |
| -2 | Файл существует и имеет нулевой размер (каталоги пустыми не бывают) |
| -s | Файл или каталог существует и имеет ненулевой размер (значение — размер в байтах) |
| -f | Данный элемент — обычный файл |
| -d | Данный элемент — каталог |
| -1 | Данный элемент — символическая ссылка |
| -S | Данный элемент — порт |
| -P | Данный элемент — именованный канал (FIFO-файл) |
| -b | Данный элемент — блок-ориентированный файл (например, монтируемый диск) |
| -с | Данный элемент — байт-ориентированный файл (например, файл устройства ввода-вывода) |
| -u | У файла или каталога установлен идентификатор пользо |
| вателя | |
| -g | У файла или каталога установлен идентификатор группы |
| -k | У файла или каталога установлен бит-липучка |
| -t | Выполнение операции isatty() над дескриптором файла дало значение "истина" |
| -T | Файл — текстовый |
| -B | Файл — двоичный |
| -M | Время с момента последнего изменения (в днях) |
| -A | Время с момента последнего доступа (в днях) |
| -C | Время с момента последнего изменения индексного дескриптора (в днях) |