perl - readdir() 是否以任何特定顺序返回其结果?

标签 perl

我有一个当前正在使用 while 循环处理的目录。文件名实际上是这样的日期:

updates.20130831.1445.hr
updates.20140831.1445.hr
updates.20150831.1445.hr
updates.20160831.1445.hr
updates.20170831.1445.hr

但是,在我的 print 语句中,我注意到 while 循环不是从第一个文件开始的。而是选择第二个或第五个等等。

如果 while 循环是连续的,为什么不是先处理第一个文件,然后处理第二个、第三个等等?我错过了什么吗?

我的 while 循环是这样的:

opendir(DIRECTORY, $Dir) or die $!;

while (my $file = readdir(DIRECTORY)) { 
          print "$file
          open (IN, $file) or die "error reading file: ", $file,"\n"

最佳答案

readdir 内置函数不保证任何顺序,因此您必须手动对名称进行排序:

for my $file (sort readdir DIRECTORY) { ... }

请注意,readdir 不会输出完整路径,因此如果您希望打开该文件,则必须在目录名前添加:

my $path = "$dir/$file";

请注意,条目可以是各种文件系统对象,包括文件、目录、符号链接(symbolic link)和命名管道。在尝试打开它们之前,您应该跳过那些不是文件的文件:

next if not -f $path;

如果您想处理目录,请考虑 readdir 输出包括 ... 目录(当前目录和父目录) ,你应该总是过滤掉:

next if $file eq "." or $file eq "..";

关于perl - readdir() 是否以任何特定顺序返回其结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824434/

相关文章:

perl - 重命名命令中的下划线(Perl 和 Unix shell)

perl - 在 Perl 中向 PayMill 发送 CURL 请求

Perl:YAML:Hash 如何选择条目?

perl - YAML::Syck 生成列表而不是哈希

perl - 是否有因子图和积调度的 Perl 实现?

perl - 如何计算 float 的 div 和 mod?

perl - 如何让 Perl 脚本识别 Win32 cmd 控制台中的参数?

perl - 在关闭程序之前做一些事情

perl - 如何使用 WWW::Mechanize 的输出?

perl - *** 检测到 glibc *** perl : double free or corruption (! prev): 0x0c2b7138 ***