class Object unless instance_methods.include? 'instance_exec' def instance_exec *a, &b m = "__instance_exec_#{ Thread.current.object_id.abs }__" singleton_class{ define_method m, &b } send m, *a ensure singleton_class{ undef_method m } rescue nil end end unless instance_methods.include? 'singleton_class' def singleton_class &b sc = class << self; self; end sc.module_eval &b if b sc end end end a = [] a.instance_exec 42 do |elem| push elem end p a