From: Wakou Aoyama Date: 1998-11-02T19:54:22+09:00 Subject: [ruby-list:10587] Re: split Mon, Nov 02, 1998 at 12:44:08PM +0900 において Yukihiro Matsumoto さん曰く: > splitのような「どう見てもperl由来」のメソッドの挙動は積極的 > な理由がない限りperlに合わせるべきでしょう.今回の場合は単に > 私がsplitの仕様を調べるのを怠ったことが原因ですから,合わせ > ます. では、ドキュメントには記載されていませんが、split のもう一つの動作を。 ===== パターンにカッコが含まれていた場合、デリミタ中のカッコにマッチしたパター ンも返す値に含まれる。 $ ruby -e 'p ":::1:2:3:::".split(/(:)/)' ["", ":", "", ":", "", ":", "1", ":", "2", ":", "3", ":", "", ":", "", ":"] $ perl -e 'print join("/", split(/(:)/, ":::1:2:3:::")), "\n"' /://://:/1/:/2/:/3/://://: この動きは Perl と同じでしたね。 さらに、これは Perl5 で追加された動作でしょうか。(私の Perl の知識は基 本的には Perl4 ベース) $ perl -e 'print join("/", split(/( )|(:)/, "1:2:3")), "\n"' 1//:/2//:/3 青ラクダ本(こちらはほとんど読んでいない)より |複数個のカッコがある場合には、たとえマッチしないカッコがあったとしても、 |すべてのカッコのペアに対してフィールドが1つずつ返される。マッチしない |カッコについては、その箇所に未定義値が返される。 つまり、 1/undef/:/2/undef/:/3 $ perl -e 'print join("/", split(/(:)|( )/, "1:2:3")), "\n"' 1/://2/://3 これはこうですね。 1/:/undef/2/:/undef/3 まあ、ややこしい動作ですし、需要の程度もわかりませんから、とりあえずは 必要無いとは思いますが。 -- 青山 和光 Wakou Aoyama