Помимо работы с файлами, в Perl есть необходимый набор встроенных функций для работы с каталогами. Нужно иметь в виду, что успешность выполнения операций с каталогами зависит от набора прав пользователя, от лица которого выполняется Perl-программа.
Функция
$ok = mkdir $directory_name; # создать каталог
mkdir $dir, $access_rights; # создать каталог, задав права
Функция
$ok = rmdir $directory_name; # удалить каталог
Функция
$ok = chdir $new_dir; # перейти в каталог $new_dir
chdir; # перейти в домашний каталог
Много других возможностей по работе с каталогами предоставляют функции из стандартной библиотеки модулей Perl. Например, функция
use Cwd; # подключить библиотечный модуль Cwd
my $current_work_directory = cwd; # запросить текущий каталог
Иногда при выполнении программы нужно определить каталог, откуда она была запущена, чтобы организовать доступ к его подкаталогам. Переменная
use FindBin; # подключить библиотечный модуль FindBin
my $program_start_dir = $FindBin::Bin; # стартовый каталог
Perl также предоставляет набор функций, организующий чтение содержимого каталога, подобно чтению записей файла. Элементами каталога могут быть обыкновенные файлы и другие каталоги, включая вложенные подкаталоги, текущий каталог (обозначаемый одной точкой) и родительский каталог (обозначаемый двумя точками).
Перед чтением содержимого каталога его необходимо открыть. Функция
$ok = opendir DIR_HANDLE, $directory_name;
Современный стиль программирования рекомендует при открытии каталога сохранять манипулятор каталога в скалярной переменной. Это ограничивает область его видимости текущим блоком или подпрограммой и предотвратит случайное изменение манипулятора в других частях программы. Например, так:
$ok = opendir my $dir_handle, $directory_name;
Функция
$ok = closedir $dir_handle; # закрыть каталог
Функция
my $file_name = readdir $dir_handle;
Таким образом можно организовать обработку всех элементов каталога в цикле, исключая текущий и родительский каталоги:
while (my $file_name = readdir $dir_handle) {
if ($file_name ne '.' && $file_name ne '..') {
print "каталог $file_name\n" if -d $file_name;
print "файл $file_name\n" if -f $file_name;
}
}
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии