Here is a rough outline of what I am thinking of:

snippet1 = <<'EOF'
  def output
    puts "I am snippet1 var is: #{var}"
    puts var2.inspect
    puts "joe"
  end
EOF

snippet2 = <<'EOF'
  def output
    puts "I am snippet2 var is: #{var}"
    puts var2.inspect
  end
EOF

class JotsOutput
end

class Jots
  def initialize(s)
    @parsed = s
    @t = JotsOutput.new
  end
  def execute
    
    if(!@t.respond_to?("output"))  # first time through...
      puts "doing eval..."
      JotsOutput.module_eval(@parsed)
    end
    
    begin
      @t.output()
    rescue NameError
      puts "namerror"
    end
    
  end
  def setvars
    # set vars in JotsOutput namespace...
  end
end

t1 = Jots.new(snippet1)
t2 = Jots.new(snippet2)  # want it to call eval again...
t1.execute
t2.execute
t1.execute

prints:
doing eval...
namerror
namerror
namerror

one problem I have is that I would like to do an eval for
each instance of the Jots object.  Not just once like I
am doing now.

I tried to replace:
JotsOutput.module_eval(@parsed)
with:
@t1.module_eval(@parsed)
and
@t1.eval(@parsed)
but neither of those worked.

Can you see what I am getting at?  I'd like to have a
different "output" function for each JotsOutput object
that each Jots object contains.

Is this possible?  If not, any work arounds come to mind?

thanks,
-joe