NAME
   Config::Dot::Array - Module for simple configure file parsing with
   arrays.

SYNOPSIS
    my $cnf = Config::Dot::Array->new(%params);
    my $struct_hr = $cnf->parse($string);
    $cnf->reset;
    my $serialized = $cnf->serialize;

METHODS
   new(%params)
            Constructor.

           *       callback

                    Callback code for adding parameter.
                    Callback arguments are:
                    $key_ar - Reference to array with keys.
                    $value - Key value.
                    Default is undef.

           *       config

                    Reference to hash structure with default config data.
                    This is hash of hashes or arrays structure.
                    Default value is reference to blank hash.

           *       set_conflicts

                    Set conflicts detection as error.
                    Default value is 1.

   parse($string_or_array_ref)
           Parse string $string_or_array_ref or reference to array
           $string_or_array_ref and returns hash structure.

   reset() Reset content in class (config parameter).

   serialize()
           Serialize 'config' hash to output.

PARAMETER_FILE
    # Comment.
    # blabla

    # White space.
    /^\s*$/

    # Parameters.
    # Key must be '[-\w\.:,]+'.
    # Separator is '='.
    key=val
    key2.subkey.subkey=val

    # Arrays.
    key3=val1
    key3=val2

ERRORS
    Mine:
            Bad 'config' parameter.
            Parameter 'callback' isn't code reference.

    From Config::Utils::conflict():
            Conflict in '%s'.

    From Class::Utils::set_params():
            Unknown parameter '%s'.

EXAMPLE1
    # Pragmas.
    use strict;
    use warnings;

    # Modules.
    use Config::Dot::Array;
    use Dumpvalue;

    # Object.
    my $struct_hr = Config::Dot::Array->new->parse(<<'END');
    key1=value1
    key2=value2
    key2=value3
    key3.subkey1=value4
    key3.subkey1=value5
    END

    # Dump
    my $dump = Dumpvalue->new;
    $dump->dumpValues($struct_hr);

    # Output:
    # 0  HASH(0x9970430)
    #    'key1' => 'value1'
    #    'key2' => ARRAY(0x9970660)
    #       0  'value2'
    #       1  'value3'
    #    'key3' => HASH(0x9970240)
    #       'subkey1' => ARRAY(0xa053658)
    #          0  'value4'
    #          1  'value5'

EXAMPLE2
    # Pragmas.
    use strict;
    use warnings;

    # Modules.
    use Config::Dot::Array;

    # Object with data.
    my $c = Config::Dot::Array->new(
            'config' => {
                    'key1' => {
                            'subkey1' => 'value1',
                    },
                    'key2' => [
                            'value2',
                            'value3',
                    ],
            },
    );

    # Serialize.
    print $c->serialize."\n";

    # Output:
    # key1=subkey1.value1
    # key2=value2
    # key2=value3

EXAMPLE3
    # Pragmas.
    use strict;
    use warnings;

    # Modules.
    use Config::Dot::Array;
    use Dumpvalue;

    # Object.
    my $struct_hr = Config::Dot::Array->new(
            'callback' => sub {
                   my ($key_ar, $value) = @_;
                   if ($key_ar->[0] eq 'key3' && $key_ar->[1] eq 'subkey1'
                           && $value eq 'value3') {

                           return 'FOOBAR';
                   }
                   return $value;
            },
    )->parse(<<'END');
    key1=value1
    key2=value2
    key3.subkey1=value3
    key3.subkey1=value4
    END

    # Dump
    my $dump = Dumpvalue->new;
    $dump->dumpValues($struct_hr);

    # Output:
    # 0  HASH(0x87d05e8)
    #    'key1' => 'value1'
    #    'key2' => 'value2'
    #    'key3' => HASH(0x87e3840)
    #       'subkey1' => ARRAY(0x87e6f68)
    #          0  'FOOBAR'
    #          1  'value4'

DEPENDENCIES
   Class::Utils, Config::Utils, English, Error::Pure, Readonly.

SEE ALSO
   Cnf, Cnf::More.

REPOSITORY
   <https://github.com/tupinek/Config-Dot-Array>

AUTHOR
   Michal Špaček <mailto:[email protected]>

   <http://skim.cz>

LICENSE AND COPYRIGHT
   BSD license.

VERSION
   0.01