use XML::Parser; use Env; my $HELM_CONFIGURATION_PREFIX = $ENV{"HELM_CONFIGURATION_PREFIX"}; # this should be the only fixed constant if (defined ($HELM_CONFIGURATION_PREFIX) { $configuration_file = $HELM_CONFIGURATION_PREFIX."/etc/helm/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]; }