Чтение дескриптора каталога.
Используется вызов readdir, который возвращает следующее имя файла или undef
opendir(ETC, "/etc") die "cannot opendir /etc:$!"; while(defined($name = readdir(ETC))) { print "$name\n"; } closedir(ETC);
Или в отсортированном порядке
opendir(ETC, "/etc") die "cannot opendir /etc:$!"; foreach $name (sort readdir(ETC)) { print "$name\n"; } closedir(ETC);
Доступ к каталогам.
Пример:
chdir("/etc") die "cannot cd to /etc ($!)";
print "where do you want to go? "; chomp($where = <STDIN>); if(chdir $where) { # OK } else { # NOT }
Открытие и закрытие дескриптора каталога.
opendir(ETC, "/etc") die "cannot opendir /etc:$!";
closedir(ETC);
Развертывание.
Преобразование аргументов вроде * или /etc/host* - в список имен файлов называется развертыванием (globbing). В PERL подлежащий развертыванию образец заключается в угловые скобки или используется функция glob().
@a = </etc/host*> @a = glob("/etc/host*");
В списочном контексте результатом является список, в скалярном - следущее совпадаущее имя.
while(defined($nextname = </etc/host*>)) { print "one of the files is $nextname\n"; }
В аргументе glob производится интерполяция:
if(-d "/usr/etc") { $where = "/usr/etc"; } else { $where = "/etc"; } @files = <$where/*>