summaryrefslogtreecommitdiff
path: root/lib/Config/Tree/Node/Value.pm
blob: d9961c058703aca02e809c3f0801a617354dfa39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package Config::Tree::Node::Value;
use parent 'Config::Tree::Node';
use strict;
use warnings;

sub new {
    my $class = shift;
    local %_ = @_;
    my $v = delete $_{value};
    my $self = $class->SUPER::new(%_);
    $self->value($v);
    return $self;
}

sub value {
    my ($self, $val) = @_;

    if (defined($val)) {
	$self->{_value} = $val;
	return; # Avoid evaluatig value too early
    } else {
	$val = $self->{_value};
    }
    
    if (ref($val) eq 'CODE') {
	$val = &$val;
    }

    if (wantarray) {
	if (ref($val) eq 'ARRAY') {
	    return @$val
	} elsif (ref($val) eq 'HASH') {
	    return %$val
        }
    }
    
    return $val;
}

sub is_leaf { 1 };

sub as_string {
    my $self = shift;
    return $self->value
}

1;

Return to:

Send suggestions and report system problems to the System administrator.