David, > When writing short scripts (several pages long) I often > want to share some variables (like CGI object, DB > connection object) in several methods. > ... > Any suggestion to make it more elegant? I often use > globals for this: > > $cgi = CGI.new('html3') > $conn = PGconn.connect(...) > > def foo > $conn.exec(...) > $cgi.out { ... } > end Well, you could just use constants: MyCGI = CGI.new('html3') MyConn = PGconn.connect(...) def foo MyCGI.exec(...) MyCGI.out { ... } end A better, but much more verbose way would be to instantiate a singleton class for your globals: require 'singleton' class Globals include Singleton attr_accessor(:cgi,:conn) end Globals.instance.cgi = CGI.new('html3') Globals.instance.conn = PGconn.connect(...) def foo Globals.instance.conn.exec(...) Globals.instance.cgi.out { ... } end There are other ways to do this too, but this should get you started. I hope this helps. - Warren Brown