我正在编写一个脚本,在目录中查找某些文件并对其进行处理。我继续写下以下内容:
opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;
虽然我可以(实际上应该)将它包装在一个函数中,但我想知道是否有更优雅的方法来执行此操作?
答案 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是最简单的解决方案。除非你多次打开文件,否则我不知道你认为前三行属于子程序的是什么