Формат файла конфигурации является неоптимальным, скажем так. То есть существуют более простые форматы для разбора и понимания. [ Добавлено : но формат уже определен другой программой. Perl достаточно гибок, чтобы справиться с этим.]
Ваш код забивает файл, когда в этом нет реальной необходимости.
Ваш код обращает внимание только на последнюю строку данных в файле (как заметил Крис Чарли, пока я это печатал).
Вы также не разрешили комментировать строки или пустые строки - и то, и другое - хорошая идея в любом конфигурационном файле, и их легко поддерживать. [ Добавлено : опять же, с предопределенным форматом, это едва уместно, но когда вы создаете свои собственные файлы, запомните это.]
Вот адаптация вашей функции в несколько более идиоматический 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
Теперь вам нужно более четко объяснить, какова структура последнего поля и почему у вас есть поле 'ip' без обозначения ключ = значение. Последовательность делает жизнь проще для всех. Вам также нужно подумать о том, как несколько строк должны обрабатываться. И я хотел бы изучить использование более ортодоксальной нотации, такой как:
pub=3;rec=0;size=3;adv=(1234,123,4.5);ip=6.00
Двоеточие или точка с запятой в качестве разделителей довольно условны; Скобки вокруг элементов в списке, разделенных запятыми, не являются возмутительным соглашением. Последовательность имеет первостепенное значение. Эмерсон сказал: «Глупая последовательность - это хобгоблин маленьких умов, обожаемый маленькими государственными деятелями, философами и богословами», но последовательность в компьютерных науках приносит большую пользу каждому.