Skip to content

Commit b14a9f3

Browse files
author
Eugene Ponizovsky
committed
Improve logic of tree traversal
Release delayed.
1 parent 0da5202 commit b14a9f3

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

README

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Config-Processor version 0.04
1+
Config-Processor version 0.03_02
22
========================
33

44
INSTALLATION

lib/Config/Processor.pm

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ use 5.008000;
44
use strict;
55
use warnings;
66

7-
our $VERSION = '0.04';
7+
our $VERSION = '0.03_02';
88

99
use File::Spec;
1010
use YAML::XS qw( LoadFile );
1111
use Cpanel::JSON::XS;
1212
use Hash::Merge;
13+
use Scalar::Util qw( refaddr );
1314
use Carp qw( croak );
1415

1516
my %FILE_EXTENSIONS_MAP = (
@@ -56,6 +57,7 @@ sub new {
5657
$self->{_hash_merge} = Hash::Merge->new( 'CONFIG_PRECEDENT' );
5758
$self->{_config} = undef;
5859
$self->{_vars} = {};
60+
$self->{_seen_nodes} = {};
5961

6062
return $self;
6163
}
@@ -83,7 +85,8 @@ sub load {
8385
$self->{_config} = $self->_build_tree(@config_sections);
8486
$self->_process_tree( $self->{_config} );
8587

86-
$self->{_vars} = {};
88+
$self->{_vars} = {};
89+
$self->{_seen_nodes} = {};
8790

8891
return $self->{_config};
8992
}
@@ -183,6 +186,12 @@ sub _process_tree {
183186

184187
$_[0] = $self->_process_node( $_[0] );
185188

189+
if ( my $node_addr = refaddr( $_[0] ) ) {
190+
return if $self->{_seen_nodes}{$node_addr};
191+
192+
$self->{_seen_nodes}{$node_addr} = 1;
193+
}
194+
186195
if ( ref( $_[0] ) eq 'HASH' ) {
187196
foreach ( values %{ $_[0] } ) {
188197
$self->_process_tree($_);

0 commit comments

Comments
 (0)