【问题标题】:Checking if a folder is empty (what are "." and "..")检查文件夹是否为空(什么是“.”和“..”)
【发布时间】:2017-08-29 10:54:28
【问题描述】:

我是 perl 新手,打算检查一个文件夹是否为空。我找到了这个功能:

is_folder_empty {
    my $dirname = shift;
    opendir(my $dh, $dirname) or die "Not a directory";
    return scalar(grep { $_ ne "." && $_ ne ".." } readdir($dh)) == 0;
}

它工作正常,但我不明白它为什么会这样做grep { $_ ne "." && $_ ne ".." }。这里...是什么意思?

【问题讨论】:

  • 使用布尔代数,你或多或少是正确的,它可以改写为:grep { not ( $_ eq '.' || $_ eq '..' ) } See 'De Morgans Law'

标签: perl


【解决方案1】:

我假设你看过Detect empty directory with Perl

即使是空目录也包含... 目录。

. 表示当前目录。

.. 表示父目录。

所以你的函数排除了这两个结果,因为它们会一直存在。

【讨论】:

    【解决方案2】:

    目录总是有一个条目。 (此目录)和 ..(父目录)。 您提到的代码读取目录的所有条目,如果只有这些条目,则为空。

    希望我能理解

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多