From: furtive.clown@... Date: 2007-11-09T00:25:17+09:00 Subject: local variables, eval, and parsing I read through posts like this http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/18c16150d26df98e/ee9c34c590b2f316?lnk=st&q=ruby+eval+local_variables#ee9c34c590b2f316 http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/fd399f1d82be73a8/4c0df13f35d7e6fb?lnk=st&q=ruby+eval+local#4c0df13f35d7e6fb but was still not satisfied with the solutions given. For example val = nil eval "val = 12" p val The mention of 'val' twice is a maintenance problem, as you need to manually update the local variables in code whenever the variables inside the string change. val = nil # forgot to update -- manual labor is hard work eval "first_val = 12 ; second_val = 44" # string has changed p first_val # oops! One solution is to change those locals into attributes of the singleton: def locals_to_accessors(str) previous_locals = local_variables eval str (local_variables - previous_locals).each { |name| value = eval name eval %Q{ class << self attr_accessor :#{name} end } self.send("#{name}=", value) } end locals_to_accessors %q{ val = 12 foo = "bar" } # no errors! p val p foo This seems like a gymnastic workaround. All I want to do insert some local variables from a config file. Is there really no way to do that?