我有一个当前正在使用 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/