@@ -214,7 +214,7 @@ sub _process_node {
214
214
215
215
if ( !ref ($node ) && $self -> {interpolate_variables } ) {
216
216
$node =~ s /\$ ((\$ ?)\{ ([^\} ]*)\} )/
217
- $2 ? $1 : $self ->_resolve_var( $3 )/ ge ;
217
+ $2 ? $1 : ( $self ->_resolve_var( $3 ) || '' )/ ge ;
218
218
}
219
219
elsif ( ref ($node ) eq ' HASH' && $self -> {process_directives } ) {
220
220
if ( defined $node -> {var } ) {
@@ -268,20 +268,21 @@ sub _resolve_var {
268
268
269
269
my $vars = $self -> {_vars };
270
270
271
- unless ( defined $vars -> {$var_name } ) {
271
+ unless ( defined $vars -> {$var_name } ) {
272
272
my @tokens = split ( / \. / , $var_name );
273
273
my $pointer = $self -> {_config };
274
274
275
+ my $value ;
276
+
275
277
while ( 1 ) {
276
278
my $token = shift @tokens ;
277
279
278
280
if ( ref ($pointer ) eq ' HASH' ) {
279
281
last unless defined $pointer -> {$token };
280
282
281
283
if ( !@tokens ) {
282
- $vars -> {$var_name }
283
- = $self -> _process_node( $pointer -> {$token } );
284
- $pointer -> {$token } = $vars -> {$var_name };
284
+ $value = $self -> _process_node( $pointer -> {$token } );
285
+ $pointer -> {$token } = $value ;
285
286
286
287
last ;
287
288
}
@@ -299,9 +300,8 @@ sub _resolve_var {
299
300
last unless defined $pointer -> [$token ];
300
301
301
302
if ( !@tokens ) {
302
- $vars -> {$var_name }
303
- = $self -> _process_node( $pointer -> [$token ] );
304
- $pointer -> [$token ] = $vars -> {$var_name };
303
+ $value = $self -> _process_node( $pointer -> [$token ] );
304
+ $pointer -> [$token ] = $value ;
305
305
306
306
last ;
307
307
}
@@ -311,10 +311,10 @@ sub _resolve_var {
311
311
$pointer = $pointer -> [$token ];
312
312
}
313
313
}
314
- }
315
314
316
- unless ( defined $vars -> {$var_name } ) {
317
- $vars -> {$var_name } = ' ' ;
315
+ if ( defined $value ) {
316
+ $vars -> {$var_name } = $value ;
317
+ }
318
318
}
319
319
320
320
return $vars -> {$var_name };
0 commit comments