Используйте opendir
вместо
opendir DIR, $dirname or die "Couldn't open dir '$dirname': $!";
my @files = readdir(DIR);
closedir DIR;
#next processing...
EDIT:
"Это даст все файлы, а не только каталоги. Вам все равно придется выполнить grep."
Да, и в этом случае вы можете просто использовать оператор проверки файлов, чтобы увидеть, является ли это каталогом или нет.
В Windows:
$dirname="C:\\";
opendir(DIR, $dirname);
@files = readdir(DIR);
closedir DIR;
foreach $key (@files)
{
if(-d "$dirname\\$key")
{
print "$key\n";
}
}