summaryrefslogtreecommitdiff
path: root/lib/Config/AST/Node/Value.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Config/AST/Node/Value.pm')
-rw-r--r--lib/Config/AST/Node/Value.pm47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/Config/AST/Node/Value.pm b/lib/Config/AST/Node/Value.pm
new file mode 100644
index 0000000..24dd18d
--- /dev/null
+++ b/lib/Config/AST/Node/Value.pm
@@ -0,0 +1,47 @@
+package Config::AST::Node::Value;
+use parent 'Config::AST::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.