我正在编写一个脚本,查找目录中的某些文件并处理它们。我一直在写以下内容:如何用一条语句在Perl中读取一个目录?
opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;
虽然我可能(事实上应该)在一个函数把这个包,我想知道是否有一个更优雅的方式来做到这一点?
我正在编写一个脚本,查找目录中的某些文件并处理它们。我一直在写以下内容:如何用一条语句在Perl中读取一个目录?
opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;
虽然我可能(事实上应该)在一个函数把这个包,我想知道是否有一个更优雅的方式来做到这一点?
最优雅的是使用其他人已经写好的功能。
use File::Slurp;
@files = read_dir $dir; # . and .. are removed by default
另一种方法是使用do
块:
my @files = do {
opendir my $d, '/your/dir/';
readdir $d;
};
它更优雅,因为我的$ d是局部阻塞(不像你的DIR全局)不需要和closedir,因为文件句柄$ d超出范围时自动关闭。
/I3az/
没人说得清glob
了吗? OK,这里有云:
@files = glob("$dir/*");
或者,如果你需要以点开始,也文件:
@files = glob("$dir/{.,}*")
水珠是最简单的解决方案。我不知道你认为前面三行代码属于哪个子程序,除非你打开这个文件不止一次
你可能想看看这个问题的答案:http://stackoverflow.com/questions/ 1506801/what-reasons-there-to-prefer-glob-over-readdir-or-vice-versa-in-perl – innaM 2009-10-14 11:21:04
你是什么意思“写一个目录”? – 2009-10-14 12:18:07
其实我的意思是“写下面的代码*” – 2009-10-14 12:52:22