Reading Configuration Files
Problem
You want to allow the users of your program to change its behavior through configuration files.
Solution
Either process a file in trivial VAR=VALUE format, setting a hash key-value pair for each setting:
while (<CONFIG>) { chomp; # no newline s/#.*//; # no comments s/^\s+//; # no leading white s/\s+$//; # no trailing white next unless length; # anything left? my ($var, $value) = split(/\s*=\s*/, $_, 2); $User_Preferences{$var} = $value; }
Or better yet, treat the config file as full Perl code:
do "$ENV{HOME}/.progrc";
Discussion
The first solution lets you read in config files in a trivial format like this (comments and blank lines are allowed):
# set class C net NETMASK = 255.255.255.0 MTU = 296 DEVICE = cua1 RATE = 115200 MODE = adaptive
After you’re done, you can pull in a setting by something like
$User_Preferences{"RATE"}
to find the value
115200. If you wanted the config file to directly set a variable in
your program using that name, instead of assigning to the hash, do
this:
no strict 'refs'; $$var = $value;
and the $RATE
variable would contain 115200.
The second solution uses do
to
pull in raw Perl code directly. When used with an expression instead
of a block, do
interprets the expression as a
filename. This is nearly identical to using
require
, but without risk of taking a fatal
exception. In the second format, the config file would look like:
# set class C net $NETMASK = '255.255.255.0'; $MTU = 0x128; # Brent, please turn on the modem $DEVICE ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.