前田です。 先日ささださんが松江に来られた時に、「$~はあまりスマートでないので できれば使いたくないが、現状では代替手段がない」という話をしました。 # Regexp.last_matchは記法が違うだけで本質的には変わらないので。 Common Lisp流の多値を導入して、正規表現を使うメソッドの返り値や ブロックパラメータにMatchDataインスタンスを追加してしまうというのは どうでしょう。 pos, m = "foo boo".index(/o/, 4) # pos => 5, m => $~ "foo boo".gsub(/(.)oo/) do |s, m| # s => $&, m => $~ end ここで、 x = 1, 2 # x => 1 だとすると、今までのコードもそのまま動くのではないかと思います。 pos = "foo boo".index(/o/, 4) # pos => 5 "foo boo".gsub(/(.)oo/) do |s| # s => $& end -- 前田 修吾