到目前为止,我知道在 Perl 中打开和读取目录的两种方法。您可以使用 opendir
、 readdir
和 closedir
,或者您可以简单地使用 glob
来获取目录的内容。
示例:
使用 opendir
、 readdir
和 closedir
:
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/