sub load { my $file=shift; defined($file) or die(qq(No file defined!\n)); -f $file or die(qq(ERROR: File "$file" not defined or not exists\n)); open(my $fh, '<', $file) or die(qq(ERROR: Can't open File "$file" $!\n)); my $ret={}; my $lastkey; while(my $line=<$fh>) { chomp($line); next if($line=~/^\s*#/o || $line=~/^\s*$/o); if(my ($key,$value)=$line=~/^\s*([^=]+?)\s*=\s*(.*?)(?:#.*)?\s*$/o) { $ret->{$key}=$value // ''; $lastkey=$key; } elsif($lastkey) { $ret->{$lastkey}.="\n$line"; } } close($fh); return $ret; } sub parse { my $hash=shift; my $sep=shift // '.'; return {} unless($hash && ref($hash) eq 'HASH'); my $ret={}; KEYLOOP: for my $k (keys(%$hash)) { my $ref=\$ret; my @kk=(); for my $n (split(/\Q$sep\E/,$k)) { push(@kk,$n); $ref=\$$ref->{$n}; next KEYLOOP if($$ref && !ref($$ref)) } $$ref=$hash->{$k}; } return $ret; }