Das Format der Konfigurationsdatei ist, sagen wir mal, suboptimal. Das heißt, es gibt einfachere Formate zum Parsen und Verstehen. [ Hinzugefügt : aber das Format ist bereits von einem anderen Programm definiert. Perl ist flexibel genug, um damit umzugehen].
Ihr Code schlürft die Datei, wenn kein wirklicher Bedarf besteht.
Ihr Code beachtet nur die letzte Datenzeile in der Datei (wie Chris Charley feststellte, als ich diesen Text schrieb).
Sie haben auch keine Kommentarzeilen oder Leerzeilen zugelassen - beides ist eine gute Idee in jeder Konfigurationsdatei und sie sind leicht zu unterstützen. [ Hinzugefügt Auch hier gilt: Bei dem vordefinierten Format ist dies kaum relevant, aber wenn Sie Ihre eigenen Dateien entwerfen, sollten Sie daran denken].
Hier ist eine Anpassung Ihrer Funktion in etwas idiomatischerem Perl.
#!/bin/perl -w
use strict;
use constant debug => 0;
sub readConfigFile()
{
my %CONFIG;
open(CON_FILE, "config") or die "failed to open file ($!)\n";
while (my $line = <CON_FILE>)
{
chomp $line;
$line =~ s/#.*//; # Remove comments
next if $line =~ /^\s*$/; # Ignore blank lines
foreach my $field (split(/>/, $line))
{
my @arr = split(/=/, $field);
$CONFIG{$arr[0]} = $arr[1];
print ":: $arr[0] => $arr[1]\n" if debug;
}
}
close(CON_FILE);
while (my($k,$v) = each %CONFIG)
{
print "$k => $v\n";
}
return %CONFIG;
}
readConfigFile; # Ignores returned hash
Jetzt müssen Sie genauer erklären, wie das letzte Feld strukturiert ist und warum Sie ein "ip"-Feld ohne die Notation Schlüssel=Wert haben. Konsistenz macht das Leben für alle einfacher. Sie müssen auch darüber nachdenken, wie mit mehreren Zeilen umgegangen werden soll. Und ich würde eine orthodoxere Notation in Erwägung ziehen, wie zum Beispiel:
pub=3;rec=0;size=3;adv=(1234,123,4.5);ip=6.00
Doppelpunkt oder Semikolon als Begrenzungszeichen sind durchaus üblich; Klammern um durch Komma getrennte Elemente in einer Liste sind keine abwegige Konvention. Konsistenz ist das A und O. Emerson sagte: "Eine törichte Konsistenz ist der Kobold kleiner Geister, verehrt von kleinen Staatsmännern und Philosophen und Göttlichen", aber Konsistenz in der Informatik ist ein großer Vorteil für alle.