Ваш вопрос не имеет ничего общего с разбором или HTML :: TokeParser;похоже, что он определяет, ссылается ли путь на каталог или нет, и получает список файлов в каталоге, если он ссылается на каталог.
stat
и -d
(вместе или независимо) может использоваться для проверки, ссылается ли путь на каталог.
На самом низком уровне opendir
+ readdir
+ closedir
используется для чтения каталога.Встроенные и многочисленные модули glob
предоставляют альтернативные способы сделать это.
Рекурсивный поиск:
sub process {
for my $qfn (@_) {
stat($qfn)
or die("Can't stat \"$qfn\": $!\n");
if (-d _) {
process(glob("\Q$qfn\E/*"));
}
elsif ($qfn =~ /\.html\z/) {
process_html_file($qfn);
}
}
}
process('www');
Нерекурсивный поиск:
sub process {
for my $qfn (@_) {
stat($qfn)
or die("Can't stat \"$qfn\": $!\n");
if (-d _) {
process_html_file(glob("\Q$qfn\E/*.html"));
}
elsif ($qfn =~ /\.html\z/) {
process_html_file($qfn);
}
}
}
process('www');
В качестве альтернативы вы можете использовать File :: Find :: Rule .
Рекурсивный поиск:
use File::Find::Rule qw( );
process_html_file($_)
for File::Find::Rule->name('*.html')->file->in('www');
Нерекурсивный поиск:
use File::Find::Rule qw( );
process_html_file($_)
for File::Find::Rule->maxdepth(1)->name('*.html')->file->in('www');