Возможный дубликат:
Как я могу перечислить все файлы в каталоге с Perl?Я хочу циклично выполниться через несколько сотен файлов, которые все содержатся в том же каталоге. Как я сделал бы это в Perl?
asyncore
отстой. glib
уже предоставляет асинхронный материал, поэтому просто используйте основной контур glib
, чтобы сделать все.
Я думаю, что обычно предполагается (даже пуристами TDD), что программист, разрабатывающий приложение путем написания тестов, уже знает что-то о дизайне и архитектуре. Иначе можно просто вписать себя в хаос программирования и анархию, написав тесты на отказ от любых принципов проектирования.
Следовательно, разработчик, пишущий приложение «сначала проверяет», уже имеет справедливое представление о том, как будет выглядеть его окончательная структура класса, и это видение направляет его, когда он пишет свои тесты.
-121--3107621-Наслаждайтесь.
opendir(DH, "directory");
my @files = readdir(DH);
closedir(DH);
foreach my $file (@files)
{
# skip . and ..
next if($file =~ /^\.$/);
next if($file =~ /^\.\.$/);
# $file is the file used on this iteration of the loop
}
Вы можете использовать READDIR или .
Или, вы можете использовать модуль, такой как путь PATH :: класс :
обычно
дети ()
не будут включать в себя записи самоуправления и родителей. и .. (или их эквиваленты на системах без Unix), потому что это похоже на я-мое-собственное деловое дело. Если вы хотите, чтобы все записи каталогов, включая эти специальные, пройдите истинное значение для всех параметров:@C = $ Dir-> дети (); # Только дети @C = $ Dir-> дети (все => 1); # Все записи
Кроме того, есть параметр no_hidden, который исключает все нормально «скрытые» записи - на Unix это означает, что исключает все записи, которые начинаются с точки (
.
):
@c = $dir->children(no_hidden => 1); # Just normally-visible entries
или Путь :: Tiny :
@Paths = Path («/ TMP») -> Дети; @Paths = Path («/ TMP») -> Дети (QR / \. TXT $ /);
Возвращает список
Путь :: Tiny
объекты для всех файлов и каталогов в каталоге. Изучает»."
и".."
автоматически.Если предоставляется дополнительный
qr //
аргумент, он возвращает только объекты для имен дочерних имен, которые соответствуют данному регулярному выражению. Только базовое имя используется для сопоставления:
@paths = path("/tmp")->children( qr/^foo/ );
# matches children like the glob foo*
Получение списка записей каталогов в массив отдает впустую некоторую память (в отличие от получения одного файла за один раз), но только с несколькими сотом файлов, это вряд ли будет вопрос.
Путь :: класс
является портативным к операционным системам, кроме * NIX и Windows. С другой стороны, AFAIK, его экземпляры используют больше памяти, чем делать Путь :: Tiny
экземпляры.
Если воспоминание - это проблема, вам лучше использовать READDIR
в , в то время как
POLOOP.
#!/usr/bin/perl -w
my @files = <*>;
foreach my $file (@files) {
print $file . "\n";
}
где
@files = <*>;
может быть
@files = </var/www/htdocs/*>;
@files = </var/www/htdocs/*.html>;
и т. Д.