summaryrefslogtreecommitdiff
path: root/lib/Module/Build/Config.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Module/Build/Config.pm')
-rw-r--r--lib/Module/Build/Config.pm59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/Module/Build/Config.pm b/lib/Module/Build/Config.pm
new file mode 100644
index 0000000..2977680
--- /dev/null
+++ b/lib/Module/Build/Config.pm
@@ -0,0 +1,59 @@
+package Module::Build::Config;
+
+use strict;
+use warnings;
+our $VERSION = '0.4214';
+$VERSION = eval $VERSION;
+use Config;
+
+sub new {
+ my ($pack, %args) = @_;
+ return bless {
+ stack => {},
+ values => $args{values} || {},
+ }, $pack;
+}
+
+sub get {
+ my ($self, $key) = @_;
+ return $self->{values}{$key} if ref($self) && exists $self->{values}{$key};
+ return $Config{$key};
+}
+
+sub set {
+ my ($self, $key, $val) = @_;
+ $self->{values}{$key} = $val;
+}
+
+sub push {
+ my ($self, $key, $val) = @_;
+ push @{$self->{stack}{$key}}, $self->{values}{$key}
+ if exists $self->{values}{$key};
+ $self->{values}{$key} = $val;
+}
+
+sub pop {
+ my ($self, $key) = @_;
+
+ my $val = delete $self->{values}{$key};
+ if ( exists $self->{stack}{$key} ) {
+ $self->{values}{$key} = pop @{$self->{stack}{$key}};
+ delete $self->{stack}{$key} unless @{$self->{stack}{$key}};
+ }
+
+ return $val;
+}
+
+sub values_set {
+ my $self = shift;
+ return undef unless ref($self);
+ return $self->{values};
+}
+
+sub all_config {
+ my $self = shift;
+ my $v = ref($self) ? $self->{values} : {};
+ return {%Config, %$v};
+}
+
+1;