Port internal variables from tardis

This commit is contained in:
Chris 2014-11-10 14:01:57 +00:00
parent acdfbd2043
commit 3370f057c4

View File

@ -106,6 +106,61 @@ sub new {
} }
## @method $ get_value($section, $name)
# Obtain the value for the given key in the specified section.
#
# @param section The section in which the key can be found.
# @param name The name of the key to obtain.
# @return The value of the key, or "" if the key is empty
sub get_value {
my $self = shift;
my $section = shift;
my $name = shift;
return $self -> {$section} -> {$name} || "";
}
## @method void set_value($section, $name, $value)
# Set the value for the given key in the specified section.
#
# @param section The section in which the key can be found.
# @param name The name of the key to set.
# @param value The value to set for the key.
sub set_value {
my $self = shift;
my $section = shift;
my $name = shift;
my $value = shift;
$self -> {$section} -> {$name} = $value;
}
## @method void replace_vars()
# Replace all variables in the configuration with the value they correspond to.
# This will traverse all sections and variables in the configuration, looking for
# $[section,name] markers and replacing them as needed. Note that this is a very
# simplistic system, only doing one pass and not attempting to check dependencies
# have been resolved, so if variables reference other variables, there's no
# guarantee that they will be correctly resolved.
sub replace_vars {
my $self = shift;
# Process all the sections...
foreach my $section (keys(%$self)) {
# Only process sections, not values
next unless(ref($self -> {$section}));
# And all key-value pairs in the section
foreach my $key (keys(%{$self -> {$section}})) {
# If the value contains a variable, replace it
$self -> {$section} -> {$key} =~ s/\$\[([-\w]+),([-\w]+)\]/$self->get_value($1,$2)/ge;
}
}
}
## @method $ read($filename) ## @method $ read($filename)
# Read a configuration file into a hash. This will process the file identified by # Read a configuration file into a hash. This will process the file identified by
# the specified filename, attempting to load its contents into a hash. Any key/value # the specified filename, attempting to load its contents into a hash. Any key/value
@ -162,6 +217,9 @@ sub read {
close(CFILE); close(CFILE);
# replace any internal variables
$self -> replace_vars();
# Store the filename for later use # Store the filename for later use
$self -> {"filename"} = $filename; $self -> {"filename"} = $filename;