Если Perl opendir всегда возвращается. и.. сначала?

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

Похоже, что 99,9% времени первые две записи в массиве всегда "." а также "..". Более поздняя логика в script имеет проблемы, если это неверно. Я столкнулся с ситуацией, когда записи в каталоге появились позже. Означает ли это, что файловая система повреждена или что-то еще? Есть ли известный порядок возврата opendir?

Ответ 1

Это всегда порядок операционной системы, представленный unsorted raw.

Пока. и... очень часто первые две записи, потому что они были первыми двумя созданными элементами. Если по какой-то причине один из них был удален (с помощью неестественных последовательностей, так как он обычно предотвращается), следующий fsck (или эквивалент) будет исправлять каталог, который будет иметь снова и снова. Это поместит одно из имен в более позднее место в списке.

Следовательно, не просто "пропустите первые две записи". Вместо этого явно сопоставьте их, чтобы отклонить их.

Ответ 2

Порядок не зависит от ОС и явно не определен иначе.

Их достаточно легко отфильтровать.

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

Ответ 3

Используйте File:: Slurp:: read_dir, который по умолчанию возвращает список, который не включает . и ...