Это необычно, я не сталкивался с этим раньше. Я не вижу способа убедить eval не добавлять эту информацию, так что вы либо делаете упомянутое регулярное выражение, либо можете определить свой собственный тип ошибки:
class MyError < RuntimeError
attr_accessor :my_message
def initialize(m)
@my_message = m.dup
super
end
end
def foo
raise MyError.new("Help!")
end
puts "\nRescue eval 'foo'"
begin
eval "foo"
rescue RuntimeError => e
puts e.my_message
end
С выходом:
Rescue eval 'foo'
Help!
В любом случае, кроме простого скрипта, определение собственных типов ошибок в любом случае является хорошей практикой.
(обновлено, чтобы исправить код в соответствии с тем, что сказал Крис в своем ответе)