Я пытаюсь найти пустые подкаталоги и удалить их.Я уверен, что есть лучшие способы добиться этого (я плохой программист и относительно новичок в Perl), но даже в этом случае я хотел бы понять, что не так с моим подходом.
use strict;
use warnings;
use File::Basename;
use File::Find
my $lambda2 = sub
{
my $path = $File::Find::name;
if ( -d $path )
{
print("Directory: ", $path, "\n");
# Define anonymous function to test if directory is empty
my $hasContent = sub
{
my $directory = shift;
opendir ( my $dh, $directory );
return scalar ( grep { $_ ne "." && $_ ne ".." } readdir ( $dh ) );
};
# Remove item if it is an empty directory
if ( ! $hasContent->( $path ) )
{
rmdir( $path );
}
}
};
my $directory = "/Users/username/testdir/";
find( { wanted => $lambda2, no_chdir => 1 }, $directory );
ЕслиУ testdir есть пустой подкаталог с именем testsubdir, скажем, я получаю, казалось бы, противоречивый ответ:
Directory: /Users/username/testdir
Directory: /Users/username/testdir/testsubdir
Can't opendir(/Users/username/testdir/testsubdir): No such file or directory
Печать последнего каталога подразумевает, что он прошел проверку -d, но в следующем сообщении об ошибке говорится, что неттакой каталог.Насколько я вижу, между ними ничего не происходит.