I've got a class called Client that runs as a remote dRuby object.  Client 
has a 'run' method which will in turn invoke a 'run' method on the object 
which is passed in - I want users to be able to define new classes which 
Client doesn't know about which have run methods.

Here's part of Client.rb:

class Client
   attr_writer :clientTimeLimit
   def initialize
      @clientTimeLimit=99999 #assume an 'infinite' timelimit
   end

   def run(task,*args)
      result = ""
      if( task.respond_to?(:run))
         result = task.run(args)
      else
         puts "task type is: #{task.type}"
         result = "COULD_NOT_RUN" 
      end
      result
   end

   def remote_require(str)
      puts "Client::remote_require(#{str})"
      instance_eval str
      #also tried class_eval str
      #and just plain: eval str
      #but none of these work!      
   end

end #class Client

if $0 == __FILE__
   require 'drb'
   clientObj = Client.new
   DRb.start_service('druby://0.0.0.0:9000',clientObj)
   puts "Client started"
   DRb.thread.join
end
####end Client.rb

So I start Client.rb on a remote machine:
remote> ruby Client.rb 

Now, on the local machine I've got a file called Task.rb that defines a 
Task class and tries to send it to the Client object running on remote:

require 'drb'
class Task
   #include DRb::DRbUndumped
   def initialize
   end
   
   def run(*args)
      puts "Task::Run - running #{args}"
   end
end

if $0 == __FILE__
   #require 'drb'
   DRb.start_service()
   client = DRbObject.new(nil,'druby://127.0.0.1:9000')
   #read this file into a string and send it over:
   requireString = ""
   File.foreach($0) { |line|
      requireString << line
   }
   client.remote_require(requireString)
   puts client.run(Task.new, "ftp","xyz","abc")
end
#end Task.rb


So I'm trying to send a Task object to the remote client and of course the 
remote client knows nothing of Task objects (unless I put a 'require 
"Task.rb" at the top of Client.rb and ensure that Task.rb is available on 
tghe remote machine - but I don't want to do that because users might 
define different classes of their own) so I added that 'remote_require' 
method to the Client class.  I send the contents of Task.rb as a string to 
the remote client's 'remote_require' method, but it doesn't work, I get:

COULD_NOT_RUN

printed on the local machine's stdout
and:

task type is: DRb::DRbUnknown

printed on the remote machine's stdout which means that the remote client 
object knows nothing about the Task class.  How can I change Client's 
remote_require method to make this work?   

Phil