From: dave.burt@... Date: 2005-08-31T14:21:34+09:00 Subject: Re: More elegant replacement for global variables Constants are a kind of global variable. Classes get free constants. You can use something like the Singeton pattern: module XmlRpc def self.login(user, pass) @user = user @client = = XMLRPC::Client.new(...) @session_id = @client.call("xmlrpc.method", $user, $pass) end def self.user() @user or raise "Not initialized" end def self.client() @user or raise "Not initialized" end def self.session_id() @session_id or raise "Not initialized" end end Then you can login globally like so: XmlRpc.login("me", "my_password") Then elsewhere you can use: client = XmlRpc.client session_id = XmlRpc.session_id (Which will throw an exception if you're not logged in yet) What do you think? It's still global. Of course another idea is to use a single global, a Hash or OpenStruct, for these related data points: $xmlrpc[:session_id] Cheers, Dave