Глава 12: Доступ к каталогам.
12.5 Чтение дескриптора каталога
Открыв дескриптор каталога, мы можем прочитать список имен с помощью функции readdir, которая принимает единственный параметр — дескриптор каталога. Каждый вызов readdir в скалярном контексте возвращает следующее имя файла (только основное имя: в возвращаемом значении никаких косых нет) в порядке, который на первый взгляд кажется случайным*. Если больше имен нет, readdir возвращает undef**. Вызов readdir в списочном контексте возвращает все оставшиеся имена файлов в виде списка с одним именем, приходящимся на каждый элемент. Вот пример, в котором выдается перечень всех имен файлов, содержащихся в каталоге /etc:
opendir(ETC,"/etc") II die "no etc?: $!";
while ($name = readdir(ETC)) { # скалярный контекст, по одному на цикл
print "$name\n"; #выводит ., .., passwd, group и т.д.
}
closedir(ETC);
А вот как можно получить все имена в алфавитном порядке с помощью функции sort:
opendir(ETC,"/etc") || die "no etc?: $!";
foreach $name (sort readdir(ETC)) { # списочный контекст с сортировкой
print "$name\n"; #выводит ., .., passwd, group и т.д.
}
closedir(ETC);
В этот список включены имена файлов, которые начинаются с точки. Это не похоже на результат развертывания, выполненного с использованием <*>, при котором имена, начинающиеся с точки, не возвращаются. С другой стороны, это похоже на результат работы команды echo* shell.
* Точнее говоря — это порядок, в котором имена файлов расположены в каталоге, т.е. тот же "беспорядочный порядок", в котором вы получаете файлы в ОС UNIX в результате вызова команды .find или Is -f.
** Это означает, что при работе с опцией -w вам придется использовать цикл while (defined ($name = readdir (...)).
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|