[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: