scan(re) の存在に気づかずに自分で

class String
  def indices(arg, &block)
    pos = 0
    while not (pos = index(arg, pos)).nil? do
      yield pos
      pos += 1
    end
  end
end

"hogehogefugagufa".indices(/h./) {|a| p [a, $~] }

みたいなのを作ったんだけど、こう書くと$~が取得できないんだね。
スコープの関係上そうなるのは分かったんだけど、$~に値が入るように
書き換えることもできる?