Нужен был perl-скрипт парсинга конф-файлов (.conf) без загрузки дополнительный модулей.
Дано:
Конфигурационный файл progname.conf, следующего содержания:
[PART1]
#Раздел первый
# Кратко опишем раздел этим комментарием
var1=value1 # Параметр и значение без разделителей
var2 = value2 # Параметр и значение разделитель пробел
var3 = value3 # Параметр и значение разделитель tab
[Part2]
# Раздел второй
# Кратко опишем раздел этим комментарием
var1 = "value 1 1 1" # строка значения в кавычках
var2 = value 2 2 two # строка значения без кавычек
Решение:
Решение не моё, нагугленное и немного подправленное под собственные нужды.
Создадим файл progname.pl
#touch ./progname.pl
#chmod a+x ./progname.pl
Вписываем следующие строки в него:
#!/usr/bin/perl
use strict;
sub ReadConfig {
my $file=shift;
die "Config not found" unless(-e $file);
my %config;
my $key;
open(CONF,"<",$file) || die "can't open config file: $!";
while() {
chomp;
~s/^[\ \t]+//;
next if /^#|^$/;
$key=$1 if /^\[(\w+)\]/;
if($key) {
next if /^\[/;
my($var,$value)=split(/=/,$_);
$var=~s/^[\t \ ]+|[\t \ ]+$//;
$value=~s/^[\t \ ]+|[\t \ ]+$//;
$value=~s/[\ \t]*#(.+)$//;
$value=$1 if /"(.+)"/g;
$config{uc($key)}{uc($var)}=$value;
}
}
return %config;
}
my %config=ReadConfig('./progname.conf');
foreach my $cnf (sort keys %config) {
print "[".$cnf."]\n";
foreach my $cnfv (sort keys %{$config{$cnf}}) {
print "\t".$cnfv."=".$config{$cnf}{$cnfv}."\n";
}
}
Примечание: Возможно не учтены многие моменты конфиг-файлов, но заданным требованиям отвечал вполне.
И смысл "колесо" придумывать?
ОтветитьУдалить