From: Kazuhiro NISHIYAMA Date: 2007-01-30T00:59:52+09:00 Subject: [ruby-dev:30211] String#sub!{...} 西山和広です。 http://zunda.freeshell.org/d/20070126.html#p04 とそのリンク先の http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/palm-ja-proxy/blazer-ja-proxy/bin/blazer-ja-proxy?rev=1.42.2.10&only_with_tag=RUBY_DEBUG_070126&view=auto をみて最小はどのくらいになりそうか試してみました。 % irb-1.8.5 ruby 1.8.5 (2006-08-25) [i686-linux] >> (s='a').sub!(//){//=~s;'b'};s.scan(/./m) => ["b", ""] >> (s='a').sub!(//){//=~s;'ABC'};s.scan(/./m) => ["A", ""] >> (s='foo').sub!(//){//=~s;'bar'};s.scan(/./m) => ["b", "a", "r", ""] >> (s='foo').sub!(//){//=~s;'hoge'};s.scan(/./m) => ["h", "o", "g", ""] >> (s='foo').sub!(//){//=~s;'hogefuga'};s.scan(/./m) => ["h", "o", "g", ""] >> (s='foobar').sub!(//){//=~s;'hogefuga'};s.scan(/./m) => ["\000", "\000", "\000", "\000", "a", "r", ""] などと色々試していて、sub!の中でのマッチ(//=~s)後に 文字列が長くなっているとおかしくなっているように 見えます。 というわけで、最小はこのくらいになりそうです。 >> (s='').sub!(//){//=~s;'a'};s.scan(/./m) => [""] -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)