Chr*_*son 12 directory perl file
在perl中测试文件夹是否为空的简单方法是什么?-s和-z不起作用.
例:
#Ensure Apps directory exists on the test PC.
if ( ! -s $gAppsDir )
{
die "\n$gAppsDir is not accessible or does not exist.\n";
}
#Ensure Apps directory exists on the test PC.
if ( ! -z $gAppsDir )
{
die "\n$gAppsDir is not accessible or does not exist.\n";
}
Run Code Online (Sandbox Code Playgroud)
以上这些,不能正常告诉我文件夹是空的.谢谢!
谢谢大家!我最终使用:
sub is_folder_empty { my $dirname = shift; opendir(my $dh, $dirname) or die "Not a directory";
return scalar(grep { $_ ne "." && $_ ne ".." } readdir($dh)) == 0; }
Run Code Online (Sandbox Code Playgroud)
Bra*_*ick 24
为了清晰起见,有点冗长,但是:
sub is_folder_empty {
my $dirname = shift;
opendir(my $dh, $dirname) or die "Not a directory";
return scalar(grep { $_ ne "." && $_ ne ".." } readdir($dh)) == 0;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
if (is_folder_empty($your_dir)) {
....
}
Run Code Online (Sandbox Code Playgroud)
如果grep { ! /^[.][.]?\z/ } readdir $dir_h
多次执行检查并且某些目录可能包含许多文件,则使用可能会对性能造成问题.
最好短路除了.
或..
找到目录条目的时刻.
在带有ActiveState perl
5.10.1的Windows XP上,以下子类似乎是grep
我$HOME
的100条目的方法的两倍:
sub is_dir_empty {
my ($dir) = @_;
opendir my $h, $dir
or die "Cannot open directory: '$dir': $!";
while ( defined (my $entry = readdir $h) ) {
return unless $entry =~ /^[.][.]?\z/;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)