lib/DNStools/Config.pm
changeset 88 0e1e5027e9c0
parent 87 6d624831079f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/DNStools/Config.pm	Sun Jan 23 00:30:15 2011 +0100
@@ -0,0 +1,82 @@
+package DNStools::Config;
+
+use strict;
+use warnings;
+
+use base "Exporter";
+
+our $VERSION   = 0.0;
+our @EXPORT_OK = qw(get_config);
+
+sub get_config(@) {
+
+    # read configuration
+    my @configs =
+        @_                          ? @_
+      : defined $ENV{DNSTOOLS_CONF} ? $ENV{DNSTOOLS_CONF}
+      :   ("dnstools.conf", "$ENV{HOME}/.dnstools.conf", "/etc/dnstools.conf");
+    my %config;
+
+    # the first config FILE
+    my ($_) = grep { -f } @configs;
+
+    die "no config file found, searched for @configs\n" if not $_;
+    open(my $cf, $_) or die "Can't open $_: $!\n";
+
+    while (<$cf>) {
+        s/#.*//;
+        s/\s//g;
+        next unless length;
+        my ($cname, $ccont) = split(/\s*=\s*/, $_, 2);
+        $config{$cname} = $ccont;
+    }
+
+    # now merge the config hashes
+    foreach my $o (grep { ref eq "HASH" } @configs) {
+        %config =
+          (%config, map { $_ => $o->{$_} } grep { defined $o->{$_} } keys %$o);
+    }
+    return %config;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+    DNStools::Config - config parser
+
+=head1 SYNOPSIS
+
+    use DNStools::Config qw(get_config);
+    %config = get_config();
+    %config = get_config($file1, $file2, ...);
+
+=head1 DESCRIPTION
+
+Simple config file parser. The format is simple:
+
+    key = value
+
+All spaces are ignored.
+
+=head1 FUNCTIONS
+
+=over
+
+=item B<get_config>(I<list of config files>)
+
+Read the first file of the list (or dies if none of the files is found).
+Returns a hash with the config keys and values.
+
+If the list is empty, the configuration file is search in some default
+locations: C<$DNSTOOLS_CONF>, F<./dnstools.conf>,
+F<$HOME/.dnstools.conf>, F</etc/dnstools.conf>.
+
+=back
+
+=cut
+
+
+