Perl readdir()是否按特定顺序返回其结果?

Perl readdir()是否按特定顺序返回其结果?,perl,Perl,我有一个目录,我目前正在处理一个while循环。文件名实际上是日期,例如: updates.20130831.1445.hr updates.20140831.1445.hr updates.20150831.1445.hr updates.20160831.1445.hr updates.20170831.1445.hr opendir(DIRECTORY, $Dir) or die $!; while (my $file = readdir(DIRECTORY)) {

我有一个目录,我目前正在处理一个while循环。文件名实际上是日期,例如:

updates.20130831.1445.hr
updates.20140831.1445.hr
updates.20150831.1445.hr
updates.20160831.1445.hr
updates.20170831.1445.hr
opendir(DIRECTORY, $Dir) or die $!;

while (my $file = readdir(DIRECTORY)) { 
          print "$file
          open (IN, $file) or die "error reading file: ", $file,"\n"
然而,不知何故,在我的print语句中,我注意到while循环并不是从第一个文件开始的。而是选择第二个或第五个等等

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

我的while循环如下所示:

updates.20130831.1445.hr
updates.20140831.1445.hr
updates.20150831.1445.hr
updates.20160831.1445.hr
updates.20170831.1445.hr
opendir(DIRECTORY, $Dir) or die $!;

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

如果你想对它们进行排序,那么就对它们进行排序


opendir
etc按照文件存储在磁盘上的顺序获取文件。不按字母顺序。它不保证顺序

如果您希望对它们进行排序,请对它们进行排序


opendir
etc按照文件存储在磁盘上的顺序获取文件。不按字母顺序。它不保证顺序内置的
readdir
不保证任何顺序,因此您必须手动对名称进行排序:

for my $file (sort readdir DIRECTORY) { ... }
请注意,
readdir
不会输出完整的路径,因此,如果要打开该文件,必须在目录名之前加上前缀:

my $path = "$dir/$file";
请注意,条目可以是各种文件系统对象,包括文件、目录、符号链接和命名管道。在尝试打开非文件之前,应跳过这些文件:

next if not -f $path;

如果您想处理目录,请考虑<代码> Redidir 输出包括<代码> <代码> >代码> ./COD>目录(当前和父DIR),您应该始终筛选出:

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

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

for my $file (sort readdir DIRECTORY) { ... }
请注意,
readdir
不会输出完整的路径,因此,如果要打开该文件,必须在目录名之前加上前缀:

my $path = "$dir/$file";
请注意,条目可以是各种文件系统对象,包括文件、目录、符号链接和命名管道。在尝试打开非文件之前,应跳过这些文件:

next if not -f $path;

如果您想处理目录,请考虑<代码> Redidir 输出包括<代码> <代码> >代码> ./COD>目录(当前和父DIR),您应该始终筛选出:

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

当是连续的时,询问
是否是连续的是没有意义的。
while
循环(在任何C语言中)只是重复执行一个块,直到某个特定条件测试为false

如果我用锤子把钉子敲入一块木头,可以用“钉子伸出时,用锤子敲打它”来形容。问我的锤击顺序是否正确是没有意义的

询问它们是否是顺序的结构是有意义的,这些结构是在有序数据结构上操作的,例如数组或列表。例如,
grep
map
foreach
。这些都是在Perl中按顺序操作的


问“readdir()
是否以任何特定顺序返回其结果?”也是有意义的。这个问题的答案是它返回结果,但它不是一个特别有用的顺序-当然不是字母/词典顺序。如果您希望文件按特定顺序列出,您应该将
readdir()
读入一个数组,然后对该数组进行
排序。

时询问
是否是顺序的,这是没有意义的。
while
循环(在任何C语言中)只是重复执行一个块,直到某个特定条件测试为false

如果我用锤子把钉子敲入一块木头,可以用“钉子伸出时,用锤子敲打它”来形容。问我的锤击顺序是否正确是没有意义的

询问它们是否是顺序的结构是有意义的,这些结构是在有序数据结构上操作的,例如数组或列表。例如,
grep
map
foreach
。这些都是在Perl中按顺序操作的


问“readdir()
是否以任何特定顺序返回其结果?”也是有意义的。这个问题的答案是它返回结果,但它不是一个特别有用的顺序-当然不是字母/词典顺序。如果你想按特定的顺序列出你的文件,你应该把代码> > Read DR()/代码>排入一个数组,然后<代码>排序> <代码>那个数组。让我意识到我的要求有多愚蠢。我只是不知道原因是排序和while循环无关。我现在是这样做的:)谢谢你在阅读后对这个问题的投入,这让我意识到我问的是多么愚蠢。我只是不知道原因是排序和while循环无关。我现在是这样做的:)