如何用一个语句读取Perl中的目录?

时间:2009-10-14 10:01:42

标签: perl directory

我正在编写一个脚本,在目录中查找某些文件并对其进行处理。我继续写下以下内容:

opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;

虽然我可以(实际上应该)将它包装在一个函数中,但我想知道是否有更优雅的方法来执行此操作?

5 个答案:

答案 0 :(得分:14)

最优雅的是使用别人已经写过的功能。

use File::Slurp;

@files = read_dir $dir;  # . and .. are removed by default

答案 1 :(得分:5)

另一种方法是使用do块:

my @files = do {
    opendir my $d, '/your/dir/';
    readdir $d;
};

它更优雅,因为 my $ d 是本地阻止的(与DIR全局不同)并且不需要closedir,因为当$ d超出范围时,文件句柄会自动关闭。

/ I3az /

答案 2 :(得分:1)

我喜欢用File::Find来做这件事。

答案 3 :(得分:0)

还没有人建议glob吗?好的,这里是:

@files = glob("$dir/*");

或者,如果您需要以点开头的文件:

@files = glob("$dir/{.,}*")

答案 4 :(得分:0)

glob是最简单的解决方案。除非你多次打开文件,否则我不知道你认为前三行属于子程序的是什么