rubyのscanはブロック無のほうが便利

String.scan(re){ブロック}がstringを返すのでStringオブジェクトを拡張した。

class String
  def scanA(exp)                # scan(re)ブロック無しと同じ                                                             
    r=[]
    scan(exp){|i|r.push(yield i)}
    r
  end
end

そしたら。ブロックなしのscan(re)は返り値が配列だったorz

>> "abcde".scan(/../)
=> ["ab", "cd"]
>> "abcdefghi".scan(/(..)./)
=> [["ab"], ["de"], ["gh"]]
>> "abcdefghi".scan(/(..)(.)/)
=> [["ab", "c"], ["de", "f"], ["gh", "i"]]