当我使用opendir,readdir和closedir读取Perl中的目录时,readdir函数似乎没有按任何特定顺序读取文件(我可以告诉).
我正在读一个目录,其中包含以epoch timestamp命名的子目录:
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);
解决方法
readdir可以在数组上下文中调用,所以只需这样做:
opendir( my $data_dh,$data_dir) or die "Cannot open $data_dir\n"; my @files = sort { $a <=> $b } readdir($data_dh); while ( my $name = shift @files ) { ...