use XML::Parser; use Env; my $HELM_CONFIGURATION_DIR = $ENV{"HELM_CONFIGURATION_DIR"}; my $DEFAULT_HELM_CONFIGURATION_DIR = "@HELM_ETC_DIR@"; # this should be the only fixed constant if (defined ($HELM_CONFIGURATION_DIR)) { $configuration_file = $HELM_CONFIGURATION_DIR."/configuration.xml"; } else { $configuration_file = $DEFAULT_HELM_CONFIGURATION_DIR."/configuration.xml"; } $parser = new XML::Parser(Handlers => {Start => \&handle_start, End => \&handle_end, Char => \&handle_char}); $parser->parsefile($configuration_file, ErrorContext => 3); sub handle_start { if ($_[1] eq "value-of") { $$varname .= ${$_[3]}; } elsif ($_[1] ne "configuration") { $varname = $_[1]; } } sub handle_end { if ($_[1] ne "value-of" && $_[1] ne "configuration") { # Next line for debugging only: # print "OK: #$_[1]# := #$$varname#\n"; $varname = undef; } } sub handle_char { $$varname .= $_[1]; }