"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