Re: Global configuration

2002-03-19 Thread Stas Bekman

Ryan Thompson wrote:
 Hi all,
 
 I did a brief search of the archives, and the web, but found few ideas
 that address this issue... which seems odd, because this is a very
 common problem with typical mod_perl applications.
 
 What I have is a large distributed mod_perl application, with many
 packages strewn throughout a hierarchy of classes on the filesystem of
 a server. This application code is either replicated to different
 servers, or shared over a read-only NFS partition. Each server needs
 to be able to set a small number of constant global options at compile
 time, which should be stored in a configuration file on the local
 filesystem.
 
 So, is there an accepted, right way to suck in a local configuration
 file at compile time? And, what's the best way to scope these
 globals so that they are visible to the classes and subclasses in
 the system that need to read them? I want to keep coupling to a
 minimum, as there is a lot of reused and reusable code. Again, these
 values can and should be considered immutable during execution.
 
 RTFM answers gratefully accepted :-)

Not really a mod_perl question, but that's very simple:

MyLocalConfig.pm:
-
use vars qw(%c);
%c = (foo = 1, bar = {});

MyAppConfig.pm:
-
BEGIN { # you wanted compile time :)
   use vars (%c);
   require MyLocalConfig.pm
   *c  = \%MyLocalConfig::c;
}
now you can access %MyAppConfig::c everywhere in your apps.

This an other techniques are covered here:
http://perl.apache.org/guide/perl.html#Using_Global_Variables_and_Shari

BTW, in perl 'there is no right way', but TIMTOWTDI :)

_
Stas Bekman JAm_pH  --   Just Another mod_perl Hacker
http://stason.org/  mod_perl Guide   http://perl.apache.org/guide
mailto:[EMAIL PROTECTED]  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/




Re: Global configuration

2002-03-19 Thread Perrin Harkins

In addition to the techniques Stas mentioned (which I've always found to
be more than adequate), there are tons of configuration modules on CPAN.
AppConfig, Config::* modules, etc.  Just make sure you choose one that
can do layered configs, so that you can specify a configuration that's
shared and then override certain settings with a local file on each
machine.

- Perrin