到目前为止,我知道在 Perl 中打开和读取目​​录的两种方法。您可以使用 opendirreaddirclosedir ,或者您可以简单地使用 glob 来获取目录的内容。

示例:

使用 opendirreaddirclosedir :

opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;

使用 glob :
my @contents = <$directory/*>;

我被告知在某些情况下 glob 方法可能会产生不可预测的结果(例如,当它遇到目录名称中的特殊字符时,它可能会在不同的操作系统上表现不同)。

我喜欢 glob 方法的一点是它“又快又脏”。这是一条简单的线路,它可以完成工作,但如果它不能在所有情况下都有效,则会引入意外且难以发现的错误。



也许我最近在一行中发现了类似 fancy method for slurping a file 的内容。

最佳答案

以下情况如何?

my @contents = get_dir_contents($dir);

您甚至可以决定如何处理错误,是否应返回 .,是否应返回 ..,是否应返回“隐藏”文件,以及自您自己编写 get_dir_contents 以来是否将路径附加到文件名。

备择方案:

  • use File::Find::Rule qw( );
    my @contents = File::Find::Rule->maxdepth(1)->in($dir);
    

  • use File::Slurp qw( read_dir );
    my @contents = read_dir($dir);
    

  • # Unix only, but that includes cygwin and OS/X.
    my @contents = <\Q$dir\E/.* \Q$dir\E/*>;
    
  • 关于Perl readdir 作为单行程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30084091/

    10-13 07:21