Config::Wild

This module reads *key - value* data pairs from a file. What sets it
apart from other configuration systems is that keys may contain Perl
regular expressions, allowing one entry to match multiple requested
keys.

Configuration information in the file has the form

  key = value

where *key* is a token which may contain Perl regular expressions
surrounded by curly brackets, e.g.

  foobar.{\d+}.name = goo

and *value* is the remainder of the line after any whitespace following
the "=" character is removed.

Keys which contain regular expressions are termed *wildcard* keys; those
without are called *absolute* keys. Wildcard keys serve as templates to
allow grouping of keys which have the same value. For instance, say
you've got a set of keys which normally have the same value, but where
on occasion you'd like to override the default:

  p.{\d+}.foo = goo
  p.99.foo = flabber

*value* may reference environment variables or other Config::Wild
variables via the following expressions:

*   Environment variables may be accessed via "${var}":

      foo = ${HOME}/foo

    If the variable doesn't exist, the expression is replaced with an
    empty string.

*   Other Config::Wild variables may be accessed via "$(var)".

      root = ${HOME}
      foo = $(root)/foo

    If the variable doesn't exist, the expression is replaced with an
    empty string. Variable expansions can be nested, as in

      root = /root
      branch = $(root)/branch
      tree = $(branch)/tree

    "tree" will evaluate to "/root/branch/tree".

*   *Either* type of variable may be accessed via $var. In this case, if
    *var* is not a Config::Wild variable, it is assumed to be an
    environment variable. If the variable doesn't exist, the expression
    is left as is.

Substitutions are made when the value method is called, not when the
values are first read in.

Lines which begin with the "#" character are ignored. There is also a
set of directives which alter where and how Config::Wild reads
configuration information. Each directive begins with the "%" character
and appears alone on a line in the config file:

%include path
    Temporarily interrupt parsing of the current configuration file, and
    switch the input stream to the file specified via *path*. See
    "Finding Configuration Files".

  Finding Configuration Files

The "dir" and "path" options to the constructor determine where
configuration files are searched for. They are optional and may not be
specified in combination.

In the following tables:

*   "file" is the provided path to the configuration file.

*   "option = default" indicates that neither "dir" nor "path" has been
    specified.

*   The file patterns are,

      /*         absolute path
      ./* ../*   paths relative to the current directory
      *          all other paths

*   In the results,

      cwd        the current working directory
      path       an entry in the path option array

   Files loaded via new and load

  +==========================================+
  |         |            file                |
  |---------+--------------------------------|
  | option  |  /*  |  ./* ../*   |  *        |
  |==========================================|
  | default | file | cwd/file    | cwd/file  |
  | path    | file | cwd/file    | path/file |
  | dir     | file | dir/file    | dir/file  |
  +---------+------+-------------+-----------+

   Files included from other files

"incdir" is the directory containing the file including the new
configuration file, e.g. the one with the %include directive.

  +==========================================+
  |         |            file                |
  |---------+--------------------------------|
  | option  |  /*  |  ./* ../*   |  *        |
  |==========================================|
  | default | file | incdir/file | cwd/file  |
  | path    | file | incdir/file | path/file |
  | dir     | file | dir/file    | dir/file  |
  +---------+------+-------------+-----------+

INSTALLATION

This is a Perl module distribution. It should be installed with whichever
tool you use to manage your installation of Perl, e.g. any of

  cpanm .
  cpan  .
  cpanp -i .

Consult http://www.cpan.org/modules/INSTALL.html for further instruction.
Should you wish to install this module manually, the procedure is

  perl Makefile.PL
  make
  make test
  make install

COPYRIGHT AND LICENSE

This software is Copyright (c) 2017 by Smithsonian Astrophysical
Observatory.

This is free software, licensed under:

  The GNU General Public License, Version 3, June 2007
