Hallo,
beim Auslesen eine Konfig-Datei möchte ich tiefere Hash-
Strukturen bilden. Nun habe ich mir eine Funktion geschrieben,
die funktioniert, aber bestimmt gibt es so einiges an der
Syntax zu bemängeln.
Die Konfig-Datei schaut also wie folgt aus...
Default-Monitor = yes
Default-Description = Datawarehouse Server
Default-OS-Name = SuSE Linux Enterprise Server
Default-OS-Release = 2.6.4
Default-Service = 43610
Default-Mail-Group = dba
Threshold-ProcStats-Total = 95
Threshold-ProcStats-New = 200
Threshold-MemStats-SwapUsedPer = 50
Threshold-PgSwStats-SwapOut = 1
Threshold-LoadAVG-RunQueue = 20
Die Funktion ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
}
Viele Grüße,
opi\n\n
<!--EDIT|opi|1147180909-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.