Можно использовать тестовый оператор файла-d , чтобы проверить, является ли что-то каталогом. Вот некоторые обычно полезные тестовые операторы файла
-e File exists. -z File has zero size (is empty). -s File has nonzero size (returns size in bytes). -f File is a plain file. -d File is a directory. -l File is a symbolic link.
, Видят perlfunc страница руководства для больше
кроме того, пытаются использовать File::Find , который может рекурсивно вызвать каталоги для Вас. Вот образец, который ищет каталоги....
sub wanted {
if (-d) {
print $File::Find::name." is a directory\n";
}
}
find(\&wanted, $mydir);
Посмотрите на-X операторы:
perldoc -f -X
обход каталога For, используйте File::Find, или, если Вы не мазохист, используйте мой модуль File::Next, который делает итератор для Вас и не требует сумасшедших обратных вызовов. На самом деле у Вас может быть File::Next, ТОЛЬКО возвращают файлы и игнорируют каталоги.
use File::Next;
my $iterator = File::Next::files( '/tmp' );
while ( defined ( my $file = $iterator->() ) ) {
print $file, "\n";
}
# Prints...
/tmp/foo.txt
/tmp/bar.pl
/tmp/baz/1
/tmp/baz/2.txt
/tmp/baz/wango/tango/purple.txt
my @files = grep { -f } @all;
my @dirs = grep { -d } @all;
my $dh = opendir("."); my @entries = grep !/^\.\.?$/, readdir($dh); closedir $dh; foreach my $entry (@entries) { if(-f $entry) { # $entry is a file } elsif (-d $entry) { # $entry is a directory } }