截至目前,我知道在Perl中打开和读取目录的两种方法。您可以使用opendir
,readdir
和closedir
,也可以只使用glob
获取目录的内容。
示例:
使用opendir
,readdir
和closedir
:
opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;
使用glob
:
my @contents = <$directory/*>;
我被告知在某些情况下glob
方法会产生不可预测的结果(例如,当它遇到目录名中的特殊字符时,它可能在不同的操作系统上采取不同的行为)。
我对glob
方法的喜爱是它的“快速和肮脏”。这是一个简单的界限,它完成了工作,但如果它不能在所有可能引入意外和难以发现的错误的情况下工作。
我想知道是否有某种“速记”方式来使用
opendir
,readdir
,closedir
方法?
我最近发现的一行中可能有类似fancy method for slurping a file的内容。
答案 0 :(得分:2)
以下情况如何?
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/*>;
答案 1 :(得分:0)
我相信我已经提出了一个有效的单行内容,涉及opendir
/ readdir
!
my @contents = do { opendir my $dh, $dir or die $!; readdir $dh };
这应该打开并读取目录,返回其所有内容,一旦do
块结束,$dh
应该由Perl&#34;自动关闭&#34;。< / p>