sub read_config {   my $file = shift;   my $conf = {};   my $line = 0;   sysopen my $fh, $file, O_RDONLY or die "cannot open $file - $!";   flock($fh,LOCK_SH);   while (<$fh>) {      $line++;      next if /^\s*(#|$)/;      chomp;      s/\s*#.*$//;      unless (/^\s*([a-zA-Z0-9-]+)\s*=\s*(.*)$/) {         warn "errors in config file $file line $line detected";         next;      }      my ($name,$value) = ($1,$2);      # Verarbeitung des Parameters      my @keys = split /-/, $name; # Parameter nach Keys splitten      my $last = pop @keys;        # den letzten Key festhalten      my $href = $conf;            # temporaere Referenz      for (@keys) {         $href->{$_} = {} unless exists $href->{$_};         $href = $href->{$_};      }      $href->{$last} = $value;   }   close $fh;   return $conf; }