@@ -4,7 +4,7 @@ use 5.008000;
4
4
use strict;
5
5
use warnings;
6
6
7
- our $VERSION = ' 0.21_02 ' ;
7
+ our $VERSION = ' 0.21_03 ' ;
8
8
9
9
use File::Spec;
10
10
use YAML::XS qw( LoadFile ) ;
@@ -229,11 +229,11 @@ sub _process_node {
229
229
230
230
if ( !ref ($node ) && $self -> {interpolate_variables } ) {
231
231
$node =~ s /\$ ((\$ ?)\{ ([^\} ]*)\} )/
232
- $2 ? $1 : ( $self ->_resolve_var( $3 , $ancs ) || '' )/ ge ;
232
+ $2 ? $1 : ( $self ->_resolve_var( $3 , [ @{ $ancs } ] ) || '' )/ ge ;
233
233
}
234
234
elsif ( ref ($node ) eq ' HASH' && $self -> {process_directives } ) {
235
235
if ( defined $node -> {var } ) {
236
- $node = $self -> _resolve_var( $node -> {var }, $ancs );
236
+ $node = $self -> _resolve_var( $node -> {var }, [ @{ $ancs } ] );
237
237
}
238
238
elsif ( defined $node -> {include } ) {
239
239
$node = $self -> _build_tree( $node -> {include } );
@@ -283,9 +283,11 @@ sub _resolve_var {
283
283
my $name = shift ;
284
284
my $ancs = shift ;
285
285
286
+ my $value ;
287
+
286
288
if ( $name =~ m / ^\. / ) {
287
- my @tokens = split ( / \. / , $name , -1 ) ;
288
- my $anc_index = -1 ;
289
+ my $node ;
290
+ my @tokens = split ( / \. / , $name , -1 ) ;
289
291
290
292
while (1) {
291
293
my $token = $tokens [0];
@@ -297,57 +299,52 @@ sub _resolve_var {
297
299
shift @tokens ;
298
300
299
301
last unless @tokens ;
302
+ next unless @{$ancs };
300
303
301
- $anc_index ++ ;
304
+ $node = shift @{ $ancs } ;
302
305
}
303
306
304
- my $node = $ancs -> [$anc_index ];
305
-
306
- my $value = eval {
307
- $self -> _fetch_value( $node , \@tokens , $ancs );
307
+ $value = eval {
308
+ $self -> _fetch_value( $node , $ancs , \@tokens );
308
309
};
309
310
310
311
if ($@ ) {
311
312
chomp $@ ;
312
313
die qq{ Can't resolve variable "$name "; $@ \n } ;
313
314
}
314
-
315
- return $value ;
316
315
}
316
+ else {
317
+ my $vars = $self -> {_vars };
317
318
318
- my $vars = $self -> {_vars };
319
-
320
- unless ( defined $vars -> {$name } ) {
321
- my @tokens = split ( / \. / , $name , -1 );
319
+ unless ( defined $vars -> {$name } ) {
320
+ my @tokens = split ( / \. / , $name , -1 );
322
321
323
- my $value = eval {
324
- $self -> _fetch_value( $self -> {_config }, \@tokens , $ancs );
325
- };
322
+ $vars -> { $name } = eval {
323
+ $self -> _fetch_value( $self -> {_config }, [], \@tokens );
324
+ };
326
325
327
- if ($@ ) {
328
- chomp $@ ;
329
- die qq{ Can't resolve variable "$name "; $@ \n } ;
326
+ if ($@ ) {
327
+ chomp $@ ;
328
+ die qq{ Can't resolve variable "$name "; $@ \n } ;
329
+ }
330
330
}
331
331
332
- $vars -> {$name } = $value ;
332
+ $value = $ vars-> {$name };
333
333
}
334
334
335
- return $vars -> { $name } ;
335
+ return $value ;
336
336
}
337
337
338
338
# ###
339
339
sub _fetch_value {
340
340
my $self = shift ;
341
341
my $node = shift ;
342
- my $tokens = shift ;
343
342
my $ancs = shift ;
343
+ my $tokens = shift ;
344
344
345
- unless ( @{$tokens } ) {
346
- return $node ;
347
- }
345
+ return $node unless @{$tokens };
348
346
349
347
my $value ;
350
- my @anc_stack = @{$ancs };
351
348
352
349
while (1) {
353
350
my $token = shift @{$tokens };
@@ -357,11 +354,11 @@ sub _fetch_value {
357
354
if ( ref ($node ) eq ' HASH' ) {
358
355
last unless defined $node -> {$token };
359
356
360
- unshift ( @anc_stack , $node );
357
+ unshift ( @{ $ancs } , $node );
361
358
362
359
unless ( @{$tokens } ) {
363
- $value = $self -> _process_node( $node -> {$token }, \ @anc_stack );
364
- $node -> {$token } = $value ;
360
+ $node -> { $token } = $self -> _process_node( $node -> {$token }, $ancs );
361
+ $value = $ node-> {$token };
365
362
366
363
last ;
367
364
}
@@ -377,11 +374,11 @@ sub _fetch_value {
377
374
378
375
last unless defined $node -> [$token ];
379
376
380
- unshift ( @anc_stack , $node );
377
+ unshift ( @{ $ancs } , $node );
381
378
382
379
unless ( @{$tokens } ) {
383
- $value = $self -> _process_node( $node -> [$token ], \ @anc_stack );
384
- $node -> [$token ] = $value ;
380
+ $node -> [ $token ] = $self -> _process_node( $node -> [$token ], $ancs );
381
+ $value = $ node-> [$token ];
385
382
386
383
last ;
387
384
}
@@ -571,7 +568,7 @@ referenced configuration parameter.
571
568
572
569
dirs:
573
570
root_dir: "/myapp"
574
- templates_dir: "${.root_dir}/templates"
571
+ templates_dir: "${myapp.dirs .root_dir}/templates"
575
572
sessions_dir: "${.root_dir}/sessions"
576
573
media_dirs:
577
574
- "${..root_dir}/media/${myapp.media_formats.0}"
0 commit comments