split はデフォルトで後続する空フィールドを削除する

昔々はまったことあるけど,久々に Perl 使ったらはまったので記念*1に。

sub show {
    print join q{, }, @_;
    print "\n";
}


# デフォルトでは後続する空フィールドは削除される
show split(/:/, 'a:b:c:::');
### => a, b, c


# 第3引数を正数で指定すると,「最大で」そのフィールド数までしか分割しない
show split(/:/, 'a:b:c:::', 2);
### => a, b:c:::


# 「最大で」なので,存在するフィールド数以上を指定しても空で埋めたりはしない
show split(/:/, 'a:b:c:::', 8);
### => a, b, c, , , 


# 負数を指定すると空フィールド含めて最大限分割してくれる
show split(/:/, 'a:b:c:::', -1);
### => a, b, c, , , 

第3引数省略時 (や 0 の場合) の挙動は,たしかに昔はまった覚えがあるけど,

  • 正数時の「最大で」という仕様 (なんとなく空フィールドでそこまで埋めてくれると思ってた)
  • 負数時の最大限分割

とかそもそも昔から知らなかった気がする。

*1:というか二度とはまらないための戒め