NAME
    Config::Utils - Common config utilities.

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

     conflict($self, $config_hr, $key);
     hash($self, $key_ar, $val);
     hash_array($self, $key_ar, $val);

SUBOUTINES
  "conflict"
     conflict($self, $config_hr, $key);

    Check conflicts. Affected variables from $self:

     - set_conflicts - Flag, then control conflicts.
     - stack - Reference to array with actual 'C<$key>' key position.

    Returns undef or fatal error.

  "hash"
     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 'C<$key>' key position.

    Returns undef or fatal error.

  "hash_array"
     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 'C<$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.

REPOSITORY
    <https://github.com/michal-josef-spacek/Config-Utils>

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

    <http://skim.cz>

LICENSE AND COPYRIGHT
    © 2011-2022 Michal Josef Špaček

    BSD 2-Clause License

VERSION
    0.08