Say like...


module Crap
#  for cs in ["InnerCrap"]
#using this instead [].each heal much pain
  ["Crup"].each do |cs|
#[].each , pair with below regexp sub cause much pain
    cs.gsub!(/ /, '')
#this and [].each above cause much pain
    module_eval %{
      class #{cs}
        def initialize
          GC.start #this cause the whole madness
        end
        def freak
          puts "feh.."
        end
      end
    }
  end
end

if __FILE__ == $0
  a = Crap::Crup.new()
  a.freak()
end

I guess this has something to do with recent changes on eval.c on both 
1.7.x and 1.6.x