代码之家  ›  专栏  ›  技术社区  ›  Ole Tange

split不返回空元素

  •  1
  • Ole Tange  · 技术社区  · 6 年前

    为什么这些都不归还BBB?

    $ perl -e '$a="  "; print map { "b" } split / /, $a;'
    <<nothing>>
    $ perl -e '$a=",,"; print map { "b" } split /,/, $a;'
    <<nothing>>
    $ perl -e '$a="  a"; print map { "b" } split / /, $a;'
    bbb
    $ perl -e '$a=",,a"; print map { "b" } split /,/, $a;'
    bbb
    

    我早就料到了 split 在所有情况下返回包含3个元素的数组。

    $ perl -V
    Summary of my perl5 (revision 5 version 24 subversion 1) configuration:
    
    1 回复  |  直到 6 年前
        1
  •  9
  •   ysth    6 年前

    split 第三个参数表示要生成多少元素:

    split /PATTERN/,EXPR,LIMIT

    … 如果 LIMIT 如果为负,则将其视为任意大;生成尽可能多的字段。

    如果 极限 如果省略(或等于零),则通常将其视为负数,但除去尾随的空字段(始终保留空的前导字段);如果所有字段都为空,则认为所有字段都是尾随的(因此在本案)。

    它默认为 0 这意味着尽可能多 但留下任何后面的空元素 .

    你可以通过 -1 作为第三个论点 分裂 抑制这种行为。