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:というか二度とはまらないための戒め