Perl readdir 作为一个单行?
Perl readdir as a one-liner?
到目前为止,我知道在 Perl 中打开和读取目录的两种方法。您可以使用 opendir
、readdir
和 closedir
或者您可以简单地使用 glob
来获取目录的内容。
示例:
使用opendir
、readdir
和closedir
:
opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;
使用glob
:
my @contents = <$directory/*>;
我被告知,在某些情况下,glob
方法会产生不可预知的结果(例如,当它在目录名称中遇到特殊字符时,它可能在不同的操作系统上采取不同的行动)。
我喜欢 glob
方法的地方在于它 "quick and dirty" 的样子。这是一条简单的线,它完成了工作,但如果它不能在所有情况下工作,可能会引入意外且难以发现的错误。
I was wondering if there was a sort of "shorthand" way to use the
opendir
, readdir
, closedir
method?
也许像这样 在我最近发现的一行中。
下面的怎么样?
my @contents = get_dir_contents($dir);
您甚至可以决定如何处理错误,是否应返回 .
,是否应返回 ..
,是否应返回 "hidden" 文件以及路径是否为由于您自己编写 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/*>;
我相信我想出了一个有效的单行代码,其中涉及 opendir
/readdir
!
my @contents = do { opendir my $dh, $dir or die $!; readdir $dh };
这应该打开并读取目录,return 它的所有内容,一旦 do
块结束,$dh
应该被 Perl 关闭 "automagically".
到目前为止,我知道在 Perl 中打开和读取目录的两种方法。您可以使用 opendir
、readdir
和 closedir
或者您可以简单地使用 glob
来获取目录的内容。
示例:
使用opendir
、readdir
和closedir
:
opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;
使用glob
:
my @contents = <$directory/*>;
我被告知,在某些情况下,glob
方法会产生不可预知的结果(例如,当它在目录名称中遇到特殊字符时,它可能在不同的操作系统上采取不同的行动)。
我喜欢 glob
方法的地方在于它 "quick and dirty" 的样子。这是一条简单的线,它完成了工作,但如果它不能在所有情况下工作,可能会引入意外且难以发现的错误。
I was wondering if there was a sort of "shorthand" way to use the
opendir
,readdir
,closedir
method?
也许像这样
下面的怎么样?
my @contents = get_dir_contents($dir);
您甚至可以决定如何处理错误,是否应返回 .
,是否应返回 ..
,是否应返回 "hidden" 文件以及路径是否为由于您自己编写 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/*>;
我相信我想出了一个有效的单行代码,其中涉及 opendir
/readdir
!
my @contents = do { opendir my $dh, $dir or die $!; readdir $dh };
这应该打开并读取目录,return 它的所有内容,一旦 do
块结束,$dh
应该被 Perl 关闭 "automagically".