代码之家  ›  专栏  ›  技术社区  ›  Kip

是否有任何保证将在Perl中对全局搜索结果进行排序?

  •  9
  • Kip  · 技术社区  · 15 年前

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

    我找不到这样或那样提到排序 in the documentation ,但在我尝试过的每个目录中似乎都是这样。

    我说的是使用这种语法:

    @files = <*>;
    

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

    @files = sort(<*>);
    
    1 回复  |  直到 15 年前
        1
  •  22
  •   Powerlord    15 年前

    在Perl5.6.0及更高版本中,文件名排序:

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

    —— perldoc for glob

    默认情况下,对路径名进行排序 以升序ASCII顺序。

    —— perldoc for File::Glob

    有一个要点:

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

    —— 文件:glob的perldoc

    说了这么多之后,你可以改变这种行为,不敏感地对大小写进行排序。

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

    注意:从5.6.0开始,全局是冗余的,但这也适用于旧版本。

    或者,如果您只想使用一个不区分大小写的全局变量:

    use File::Glob ':glob';
    
    @files = bsd_glob('*', GLOB_NOCASE);