| Config-Hierarchical documentation | view source | Contained in the Config-Hierarchical distribution. |
Config::Hierarchical::Delta - Comparator for hashes and Config::Hierarchical objects
# comparing hashes:
use Config::Hierarchical ;
use Config::Hierarchical::Delta qw (GetConfigDelta GetConfigHierarchicalDelta DumpConfigHierarchicalDelta Get_NoIdentical_Filter) ;
my $delta = GetConfigDelta
(
{name => {A => 1, COMMON => 0}},
{name_2 => {B => 2, COMMON => 0}}
) ;
$delta is a reference to the following hash:
{
'in \'name\' only' => {'A' => 1},
'in \'name_2\' only' => {'B' => 2},
'identical' => {'COMMON' => 0},
},
# comparing Config Hierarchical objects:
my $config_0 = new Config::Hierarchical
(
NAME => 'config 0',
INITIAL_VALUES =>
[
{NAME => 'CC1', VALUE => '1'},
{NAME => 'CC2', VALUE => '2'},
] ,
) ;
my $config_1 = new Config::Hierarchical
(
NAME => 'config 1',
CATEGORY_NAMES => ['A', 'B',],
DEFAULT_CATEGORY => 'A',
INITIAL_VALUES =>
[
{CATEGORY => 'B', ALIAS => $config_0},
{NAME => 'CC1', VALUE => '1'},
{NAME => 'CC2', VALUE => '2'},
{NAME => 'CC3', VALUE => '3'},
] ,
) ;
$config_1->Set(NAME => 'CC1', VALUE => '1.1') ;
my $config_2 = new Config::Hierarchical
(
NAME => 'config 2',
CATEGORY_NAMES => ['<A>', 'B',],
DEFAULT_CATEGORY => 'A',
INITIAL_VALUES =>
[
{CATEGORY => 'B', ALIAS => $config_1},
] ,
) ;
$config_2->Set(CATEGORY => 'A', NAME => 'CC1', VALUE => 'A', OVERRIDE => 1) ;
$config_2->Set(CATEGORY => 'A', NAME => 'XYZ', VALUE => 'xyz') ;
my $dump = DumpConfigHierarchicalDelta($config_2, $config_0) ;
$dump contains the following string:
Delta between 'config 2' and 'config 0'': |- different | `- CC1 | |- config 0 = 1 | `- config 2 = A |- identical | `- CC2 = 2 `- in 'config 2' only |- CC3 = 3 `- XYZ = xyz
This module lets you compare hashes and Config::Hierarchical objects.
my $delta = GetConfigDelta
(
{name => {A => 1, COMMON => 0}},
{name_2 => {B => 2, COMMON => 0}}
) ;
GetConfigDelta compares two hashes and returns a reference to a hash containing up to 4 elements. It takes as argument two hash reference which contain a single element. The key is used as name for the hash while the value is a reference to the hash to be compared.
Returned elements:
Contains all the elements that are identical in both hashes as well as the value they have
Contains the elements that are common in both hashes but with different values
Contains the elements that exists in the first hash but not in the second hash .
Contains the elements that exists in the first hash but not in the second hash .
my $config_1 = new Config::Hierarchical(...) ; my $config_2 = new Config::Hierarchical(...) ; GetConfigHierarchicalDelta($config_1, $config_2) ;
Compares two Config::Hierarchical objects and returns a reference to hash containing the delta between the objects. See GetConfigDeleta for a description of the returned hash.
The name of the Config::Variable object is extracted from the objects.
my $config_1 = new Config::Hierarchical(...) my $config_2 = new Config::Hierarchical(...) ; print DumpConfigHierarchicalDelta($config_1, $config_2, QUOTE_VALUES => 1) ;
The first two arguments a Config::Hierarchical objects, the rest of the arguments are passed as is to Data::TreeDumper.
This sub returns a string containing the dump of the delta. See Synopsis for an output example.
Dumping a config delta with:
print DumpConfigHierarchicalDelta($config_2, $config_0) ;
Gives:
$expected_dump = <<EOD ; Delta between 'config 2' and 'config 0'': |- different | `- CC1 | |- config 0 = 1 | `- config 2 = A |- identical | `- CC2 = 2 `- in 'config 2' only |- CC3 = 3 `- XYZ = xyz
if you do not want to display the configuration variables that are identical, use:
print DumpConfigHierarchicalDelta($config_2, $config_0, Get_NoIdentical_Filter()) ;
which gives:
my $expected_dump = <<EOD ; Delta between 'config 2' and 'config 0'': |- different | `- CC1 | |- config 0 = 1 | `- config 2 = A `- in 'config 2' only |- CC3 = 3 `- XYZ = xyz EOD
Returns a Data::TreeDumper filter you can use to remove the 'identical' element from the delta hash.
None so far.
Khemir Nadim ibn Hamouda CPAN ID: NKH mailto:nadim@khemir.net
Copyright 2006-2007 Khemir Nadim. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
You can find documentation for this module with the perldoc command.
perldoc Config::Hierarchical
You can also look for information at:
Please report any bugs or feature requests to L <bug-config-hierarchical@rt.cpan.org>.
We will be notified, and then you'll automatically be notified of progress on your bug as we make changes.
| Config-Hierarchical documentation | view source | Contained in the Config-Hierarchical distribution. |