Re: What config file for a .pm perl module ?
On Thu, Dec 27, 2001 at 11:49:12PM +0800, James Bromberger wrote:
> On Thu, Dec 27, 2001 at 09:19:16AM -0600, Steve Langasek wrote:
> <chomp />
> > My own approach? Write your own parser for a simple 'key = value' style
> > config file. This can usually be done in ten lines or less[1] using
> > perl's powerful regexp engine.
> <chomp />
> > [1] depending, of course, on your standards for code legibility ;)
>
Consider also something like the config file for dbiproxy. Let perl
do all the parsing in an eval.
>
> Something like:
>
> <code>
> my $config = "/etc/perl-passwd.conf"; # Or whatever
> my $options = {}; # Not a hash, a reference to a hash
> open CONFIG, $config or die "Cannot open $config: $!";
> while (<CONFIG>) {
> next if /^(#.*)?$/; # skip comments, blanks
> if (/^\s*(\w+)\s*=\s*(.+)\s*/) { # Match "blah = foo bar"
> $options->{$1} = $2 # Set out reference to hash
> } else {
> warn "Error: $_"; # Complain otherwise...
> }
> }
> close CONFIG; # Move along, nothing to see here...
> # Now use $options for your config
> # but do more sanity checking on the
> # values of each key!
> </code>
>
> ... and if you don't want the sanity check on the key = value, just use
> "$options->{$1} = $2 if (/^\s*(\w+)\s*=\s*(.+)\s*/);" at line 6.
>
> Then you get to do things like setting options (keys) to arrays of values,
> having user config files override system ones and/or vice-versa, and other fun
> games; left as an exercise to the reader...
>
>
> James
>
> BTW, for those who have the Camel 5 book edition 2: make sure you take a
> peek at the edition 3; its about double the pages, lots of cool stuff...
> --
> James Bromberger <james_AT_rcpt.to> www.james.rcpt.to
> Australian Debian Conference: http://www.linux.org.au/conf/debiancon.html
> Remainder moved to http://www.james.rcpt.to/james/sig.html
--
Christopher F. Miller, Publisher cfm@maine.com
MaineStreet Communications, Inc 208 Portland Road, Gray, ME 04039
1.207.657.5078 http://www.maine.com/
Content/site management, online commerce, internet integration, Debian linux
Reply to: