【发布时间】:2009-01-12 17:22:18
【问题描述】:
当我在 Perl 中读取带有 opendir、readdir 和 closedir 的目录时,readdir 函数似乎没有以任何特定顺序读取文件(我知道)。
我正在读取一个目录,其中包含以纪元时间戳命名的子目录:
1224161460
1228324260
1229698140
我想按数字顺序读取这些目录,这会将最旧的目录放在第一位。
当我使用readdir时,它读取的第一个是1228324260,也就是中间的。我知道我可以将目录内容放在一个数组中并对数组进行排序,但是有没有可以传递给readdir 以按排序顺序读取的选项?或者也许比将所有内容推入数组并对数组进行排序更优雅的方式来实现这一点?可能也有模块可以做到这一点,但是很难在我们的环境中安装模块,所以除非它是内置模块,否则我宁愿不使用模块...
谢谢!
编辑 根据要求,我发布了我正在使用的代码:
opendir( my $data_dh, $data_dir ) or die "Cannot open $data_dir\n";
while ( my $name = readdir($data_dh) ) {
next if ( $name eq '.' or $name eq '..' );
my $full_path = "${data_dir}/${name}";
next unless ( -d $full_path );
process_dir($full_path);
}
closedir($data_dh);
【问题讨论】:
-
我在 AIX 机器上使用 perl 5.8.2,如果有影响的话
-
我知道这是一个简单的脚本,但你能发布你的代码,这样我们就不必重现它了吗?
-
process_dir 之前的 & 符号不是必需的,并且在某些情况下可能是有害的。我建议你删除它。
-
你不应该做 "method() || die";当您将方法调用链接在一起时,“或”运算符就是您想要的。例如,“opendir() 或死“无法打开”
-
谢谢罗伯特 - 我将开始使用“或”来代替
标签: perl directory readdir getdirectories