#! /usr/bin/env ruby # # this if my current preferred method of reporting errors from the correct # filename and line number when executing eval'd/metaprogrammed code # class C def C.binding Kernel.binding end end lineno, code = __LINE__ + 1, <<-__ def foo 42 end def bar raise end __ srcfile = __FILE__ eval(code, C.binding, srcfile, lineno) p C.new.foo p C.new.bar __END__ 42 a.rb:18:in `bar': unhandled exception from a.rb:20