Perl的opendir应该总是回归。和..首先?

时间:2010-04-16 15:41:53

标签: perl opendir

  opendir MYDIR, "$dir";
  my @FILES = readdir MYDIR;
  closedir MYDIR;

似乎99.9%的时间数组中前两个条目总是“。”和“..”。如果不是这样,脚本中的后来逻辑就会出现问题。我遇到了以后出现目录条目的情况。这是否表明文件系统已损坏或其他?是否有一个已知的命令,以什么opendir返回?

3 个答案:

答案 0 :(得分:21)

始终是操作系统订单,未按原样显示。

虽然。和...通常是前两个条目,这是因为它们是创建的前两个条目。如果由于某种原因,其中一个被删除(通过不自然的序列,因为它通常被阻止),下一个fsck(或等效的)将修复目录以再次拥有它们。这会将其中一个名称放在列表的后面。

因此,不要只是“跳过前两个条目”。相反,明确地匹配它们以拒绝它们。

答案 1 :(得分:8)

订单由操作系统决定,明确没有另外定义。

它们很容易过滤掉。

   opendir MYDIR, "$dir";
   my @FILES = grep !/^\.\.?$/, readdir MYDIR  ;
   closedir MYDIR;

答案 2 :(得分:6)

使用File::Slurp::read_dir,默认情况下会返回不包含...的列表。