NAME

Config::Mini - Very simple INI-style configuration parser

SAMPLE CONFIGURATION

In your config file:

# this is a comment
# these will go in section [general] which is the default
foo = bar
baz = buz

[section1]
key1 = val1
key2 = val2

[section2]
key3 = val3
key4 = arrayvalue
key4 = arrayvalue2
key4 = arrayvalue3

USAGE

In your perl code:

use Config::Mini; my $config = Config::Mini->new ('sample.conf'); print "These are the sections which are defined in the config file:\n"; print join "\n", $config->sections();

# will print 'arrayvalue' print $config->section ('section2')->{'key4'}; print $config->section ('section2')->{'__key4'}->[2];

%directives

By default, Config::Mini turns sections into hashes. For instance, the following section:

[test]
foo = bar
foo = bar2
baz = buz

Will be turned into:

{
  foo   => 'bar',
  baz   => 'buz',
  __foo => [ 'bar', 'bar2' ],
  __baz => [ 'buz' ],
}

When you write your own objects, having this convention is fine. However, you may want to instantiate other objects from CPAN than your own. For example, a Cache::MemCached is constructed like this in Perl:

$memd = Cache::Memcached->new {
  'servers'            => [ "10.0.0.15:11211", "10.0.0.15:11212", "10.0.0.17:11211" ]
  'debug'              => 0,
  'compress_threshold' => 10_000,
};

So having the following config won't do:

[cache]
%package = Cache::Memcached
servers  = 10.0.0.15:11211
servers  = 10.0.0.15:11212
servers  = 10.0.0.17:11211
debug    = 0
compress_threshold = 10_000

Because Cache::Memcached expects 'servers' to be an array, not a scalar.

In this case, you can do the following:

[cache]
%package = Cache::Memcached
@servers = 10.0.0.15:11211
@servers = 10.0.0.15:11212
@servers = 10.0.0.17:11211
debug    = 0
compress_threshold = 10_000

This will let Config::Mini know that 'servers' is meant to be an array reference.

If you want, you can also let it know that debug and compress_threshold are just scalars so it doesn't create the '__debug' and '__compress_threshold' attributes, using the dollar symbol:

[cache]
%package = Cache::Memcached
@servers = 10.0.0.15:11211
@servers = 10.0.0.15:11212
@servers = 10.0.0.17:11211
$debug   = 0
$compress_threshold = 10_000

The only problem now is that your configuration file is seriously starting to look like Perl, so I would recommend using these 'tricks' only where it's 100% necessary.

%include, %package, %constructor

You can use the following commands:

%include /path/to/file

Will include /path/to/file. Relative paths are supported (it will act as if you were chdir'ed to the current config file location), but wildcards at not (well, not yet).

%package My::Package::Name

Will attempt to create an object rather than a file name. For example:

[database]
%package = Rose::DB
%constructor = register_db
domain   = development
type     = main
driver   = mysql
database = dev_db
host     = localhost
username = devuser
password = mysecret

%constructor constructor_name

Most Perl objects use new() for their constructor method, however sometimes the constructor is called something else. If %constructor is specified, then it will be called instead of new()

%hashref = true

Some folks prefer to construct their objects this way:

my $object = Foo->new ( { %args } );

Instead of

my $object = Foo->new ( %args );

This directive allows you to accomodate them (Cache::Cache comes to mind). So for example, you'd have:

[cache]
%package = Cache::FileCache
%hashref = true
namespace = MyNamespace
default_expires_in = 600

%args = key1 key2 key3

Some modules have constructors where you don't pass a hash, but a simple list of arguments. For example:

File::BLOB->from_file( 'filename.txt' );

In this case, you can do:

[fileblob]
%package = File::Blob
%constructor = from_file
%args filename
filename = filename.txt

my $config = Config::Mini->new ($config_file);

Creates a new Config::Mini object.

@config_sections = $config->sections();

Returns a list of section names.

my $hash = $config->section ($section_name);

Returns a hashref (or an object) which represents this config section.

FUNCTIONAL STYLE

If you don't want to use the OO-style, you can use the functions below.

Config::Mini::parse_file ($filename)

Parses config file $filename

Config::Mini::parse_data (@data)

Parses @data

Config::Mini::get ($context, $key)

Returns the value for $key in $context.

Returns the value as an array if the requested value is an array.

Return the first value otherwise.

Config::Mini::instantiate ($context)

If $context is used to describe an object, Config::Mini will try to instantiate it.

If $section contains a "package" attribute, Config::Mini will try to load that package and call a new() method to instantiate the object.

Otherwise, it will simply return a hash reference.

Values can be considered as a scalar or an array. Hence, Config::Mini uses <attribute_name> for scalar values and '__<attribute_name>' for array values.

Config::Mini::select ($regex)

Selects all section entries matching $regex, and returns a list of instantiated objects using instantiate() for each of them.

AUTHOR

Copyright 2006 - Jean-Michel Hiver All rights reserved

This module is free software and is distributed under the same license as Perl itself. Use it at your own risk.