NAME
    Config::Utils - Common config utilities.

SYNOPSIS
     use Config::Utils qw(conflict hash hash_array);

     conflict($self, {'key' => 1}, 'key');
     hash($self, ['one', 'two'], $val);
     hash_array($self, ['one', 'two'], $val);

SUBOUTINES
    "conflict($self, $config_hr, $key)"
             Check conflicts.
             Affected variables from $self:
             - set_conflicts - Flag, then control conflicts.
             - stack - Reference to array with actual '$key' key position.
             Returns undef or fatal error.

    "hash($self, $key_ar, $val)"
             Create record to hash.
             Affected variables from $self:
             - config - Actual configuration in hash reference.
             - set_conflicts - Flag, then control conflicts.
             - stack - Reference to array with actual '$key' key position.
             Returns undef or fatal error.

    "hash_array($self, $key_ar, $val)"
             Create record to hash.
             If exists more value record for one key, then create array of values.
             Affected variables from $self:
             - config - Actual configuration in hash reference.
             - set_conflicts - Flag, then control conflicts.
             - stack - Reference to array with actual '$key' key position.
             Returns undef or fatal error.

ERRORS
     conflict():
             Conflict in '%s'.

     hash():
             Conflict in '%s'.

     hash_array():
             Conflict in '%s'.

EXAMPLE1
     use strict;
     use warnings;

     use Config::Utils qw(conflict);

     # Object.
     my $self = {
             'set_conflicts' => 1,
             'stack' => [],
     };

     # Conflict.
     conflict($self, {'key' => 'value'}, 'key');

     # Output:
     # ERROR: Conflict in 'key'.

EXAMPLE2
     use strict;
     use warnings;

     use Config::Utils qw(hash);
     use Dumpvalue;

     # Object.
     my $self = {
             'config' => {},
             'set_conflicts' => 1,
             'stack' => [],
     };

     # Add records.
     hash($self, ['foo', 'baz1'], 'bar');
     hash($self, ['foo', 'baz2'], 'bar');

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

     # Output:
     # 0  HASH(0x955f3c8)
     #    'config' => HASH(0x955f418)
     #       'foo' => HASH(0x955f308)
     #          'baz1' => 'bar'
     #          'baz2' => 'bar'
     #    'set_conflicts' => 1
     #    'stack' => ARRAY(0x955cc38)
     #         empty array

EXAMPLE3
     use strict;
     use warnings;

     use Config::Utils qw(hash_array);
     use Dumpvalue;

     # Object.
     my $self = {
             'config' => {},
             'set_conflicts' => 1,
             'stack' => [],
     };

     # Add records.
     hash_array($self, ['foo', 'baz'], 'bar');
     hash_array($self, ['foo', 'baz'], 'bar');

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

     # Output:
     # 0  HASH(0x8edf890)
     #    'config' => HASH(0x8edf850)
     #       'foo' => HASH(0x8edf840)
     #          'baz' => ARRAY(0x8edf6d0)
     #             0  'bar'
     #             1  'bar'
     #    'set_conflicts' => 1
     #    'stack' => ARRAY(0x8edf6e0)
     #         empty array

EXAMPLE4
     use strict;
     use warnings;

     use Config::Utils qw(hash_array);
     use Dumpvalue;

     # Object.
     my $self = {
             'callback' => sub {
                     my ($key_ar, $value) = @_;
                     return uc($value);
             },
             'config' => {},
             'set_conflicts' => 1,
             'stack' => [],
     };

     # Add records.
     hash_array($self, ['foo', 'baz'], 'bar');
     hash_array($self, ['foo', 'baz'], 'bar');

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

     # Output:
     # 0  HASH(0x8edf890)
     #    'callback' => CODE(0x8405c40)
     #       -> &CODE(0x8405c40) in ???
     #    'config' => HASH(0x8edf850)
     #       'foo' => HASH(0x8edf840)
     #          'baz' => ARRAY(0x8edf6d0)
     #             0  'BAR'
     #             1  'BAR'
     #    'set_conflicts' => 1
     #    'stack' => ARRAY(0x8edf6e0)
     #         empty array

DEPENDENCIES
    Error::Pure, Exporter, Readonly.

SEE ALSO
    Config::Dot
        Module for simple configure file parsing.

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

AUTHOR
    Michal Josef Špaček <mailto:skim@cpan.org>

    <http://skim.cz>

LICENSE AND COPYRIGHT
     © Michal Josef Špaček 2011-2020
     BSD 2-Clause License

VERSION
    0.07

