"Bertram Scharpf" <lists / bertram-scharpf.de> schrieb im Newsbeitrag news:20050130214711.GA30470 / homer.bertram-scharpf... > Hi, > > do I have any possibiliy to save and restore global > and instance variables? I think of something like: > > user@host$ cat l.rb > class C ; @@i = 0 ; end > $g = "" > > cache_globals { load 'm.rb' } > assert $g == "" and C.instance_eval { @@i.zero? } > > user@host$ cat m.rb > C.instance_eval { @@i += 99 } > $g << "foo" > user@host$ > > There are several workarounds, for example starting another > process. What is the smartest way to do it? This is one way that's better than another process. module Kernel private def cache_globals store = {} global_variables.each {|v| store[v] = eval(v)} begin return yield ensure store.each do |n,v| begin eval "#{n}=v" rescue NameError, SyntaxError, ArgumentError # ignore end end end end end $f = 0 p $f cg { $f = 100; p $f } p $f You can also create something with #trace_var: http://www.ruby-doc.org/core/classes/Kernel.html#M001741 Kind regards robert