24. Хочу прочитать список файлов в каталоге, но почему-то не работает илиглючит. Делаю так:@files=<*>;
Такой способ вызывает внешнюю программу glob (также, как и способ
@files=glob("*")). Это неправильно не только потому, что на запуск внешней
программы уходит время и ресурсы, но и потому, что где-нибудь этой программы
может просто не оказаться. Более правильный способ - это:
opendir DIR,'/tmp';
@files=readdir DIR;
closedir DIR;
или
opendir DIR,'/tmp';
while $file (readdir DIR)
{
}
closedir DIR;
Заметьте, что в $file будут подставляться как имена файлов, так и имена
подкаталогов.
Hесколько подсказок. Чтобы прочесть список файлов, в котором не содержалось
бы '.' и '..', можно написать следующее:
opendir DIR,'/tmp';
@files=grep !/^\.+$/,readdir DIR;
closedir DIR;
Таким же способом,- с помощью regexp,- можно задавать любые другие маски
файлов.
Если вы хотите прочесть список каталогов, не трогая файлы:
opendir DIR,/tmp';
@dirs=grep {!/^\.+$/ and -d "/tmp/$_"} readdir DIR;
closedir DIR;
<<- Как работать из perl с базами данных?
->> Как сделать демона?
Русский PERL programming FAQ. Часто задаваемые вопросы по программированию на perl [К списку статей] [К оглавлению]