Есть ли гарантия того, что результаты глобализации будут отсортированы в Perl? - PullRequest
10 голосов
/ 22 сентября 2009

Есть ли какая-либо гарантия, что массив имен файлов, возвращаемых с глобуса (например, <*>), будет отсортирован?

Я не могу найти, чтобы сортировка упоминалась так или иначе в документации , но, похоже, это имеет место в каждом каталоге, на котором я пробовал.

Я говорю об использовании этого синтаксиса:

@files = <*>;

Если мне нужно отсортировать файлы, будет ли приведенное ниже излишним?

@files = sort(<*>);

1 Ответ

23 голосов
/ 22 сентября 2009

В Perl 5.6.0 и новее имена файлов сортируются:

Начиная с v5.6.0, этот оператор реализован с использованием стандарта File :: Glob extension.

- perldoc для глобуса

По умолчанию имена путей сортируются в порядке возрастания ASCII.

- perldoc для File :: Glob

Есть один улов:

По умолчанию имена файлов предполагаются быть чувствительным к регистру

- perldoc для File :: Glob

Сказав все это, вы можете изменить это поведение для сортировки без учета регистра с помощью

use File::Glob qw(:globally :nocase);

Обратите внимание: глобально избыточно с 5.6.0, но это будет работать и на более старых версиях.

В качестве альтернативы, если вы просто хотите сделать один шарик с учетом регистра:

use File::Glob ':glob';

@files = bsd_glob('*', GLOB_NOCASE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...