有没有保证会在Perl中对globbing的结果进行排序?

Kip*_*Kip 10 sorting perl glob

是否有保证从glob(例如<*>)返回的文件名数组将被排序?

我无法在文档中找到排序方式,但在我尝试过的每个目录中似乎都是这种情况.

我在谈论使用这种语法:

@files = <*>;
Run Code Online (Sandbox Code Playgroud)

如果我需要对文件进行排序,下面的内容是多余的吗?

@files = sort(<*>);
Run Code Online (Sandbox Code Playgroud)

Pow*_*ord 23

在Perl 5.6.0及更高版本中,文件名已排序:

从v5.6.0开始,此运算符使用标准的File :: Glob扩展实现.

- perldoc for glob

默认情况下,路径名按升序ASCII顺序排序.

- 文件:: Glob的perldoc

有一个问题:

默认情况下,假定文件名区分大小写

- 文件:: Glob的perldoc

说了这么多,你可以改变这种行为,以区分大小写不敏感

use File::Glob qw(:globally :nocase);
Run Code Online (Sandbox Code Playgroud)

请注意:自5.6.0以来全局冗余,但这也适用于旧版本.

或者,如果您只想使用不区分大小写的单个glob:

use File::Glob ':glob';

@files = bsd_glob('*', GLOB_NOCASE);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我想我现在没有注意到内部使用的File :: Glob (2认同)