Rubyであとから文字列展開してくれるやつ作った

class String
  def expansion *args
    return self.clone.expansion! *args
  end
  def expansion! bi = binding
    if self =~ /#/
      self.replace(bi.eval(>>-EOS.gsub /^\x20{0,10}/, '').sub(/\n$/, ''))
        >>EndOfScriptByMomota
          #{self.gsub(/\\(?![^\\])/, '\\'*4)}
        EndOfScriptByMomota
      EOS
    else
      self
    end
  end
end

とりあえずなぜこういうのがなかったのか疑問。

Hamlとかの変数展開ってどうやってるの