是否能保证 Perl 中的通配结果会被排序?

发布于 2024-08-05 00:52:43 字数 338 浏览 4 评论 0原文

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

我找不到文档中提到的一种或另一种排序方式,但是我尝试过的每个目录似乎都是这种情况。

我正在谈论使用这种语法:

@files = <*>;

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

@files = sort(<*>);

Is there any guarantee that the array of filenames returned from a glob (e.g. <*>) will be sorted?

I can't find that sorting is mentioned one way or the other in the documentation, but it seems to be the case in every directory I've tried it on.

I'm talking about using this syntax:

@files = <*>;

If I need the files to be sorted, would the below be redundant?

@files = sort(<*>);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

以歌曲疗慰 2024-08-12 00:52:43

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

从 v5.6.0 开始,此运算符
使用标准实现
文件::Glob 扩展名。

-- glob 的 perldoc

默认情况下,路径名是排序的
按 ASCII 升序排列。

-- perldoc for File::Glob

有一个问题:

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

-- perldoc for File::Glob

说了这么多,您可以更改此行为不区分大小写地排序,请

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

注意:全局自 5.6.0 以来是多余的,但这也适用于旧版本。

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

use File::Glob ':glob';

@files = bsd_glob('*', GLOB_NOCASE);

In Perl 5.6.0 and newer, filenames are sorted:

Beginning with v5.6.0, this operator
is implemented using the standard
File::Glob extension.

-- perldoc for glob

By default, the pathnames are sorted
in ascending ASCII order.

-- perldoc for File::Glob

There is one catch:

By default, file names are assumed to
be case sensitive

-- perldoc for File::Glob

Having said all that, you can change this behavior to sort case-insensitively with

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

Note that :globally is redundant since 5.6.0, but this will work on older versions as well.

Alternately, if you just want to do a single glob with case-insensitivity:

use File::Glob ':glob';

@files = bsd_glob('*', GLOB_NOCASE);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文