LINUX.ORG.RU

проще всего иметь конфиг вида

$config = {
 param = '1',
 data = [
   par1 = '1',
   par2 = '2
 ]
}

т.е. это определение анонимного хеша. Ограничение - синтаксис самого перла.

Метод работы - прочитать файл в переменную и

eval $configContend or die @!;

ЗЫ. Можно еще cpan.org пошуркать на предмет библиотек готовых. :)

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

Исправлюсь

$config = {
 param => '1',
 data => [
   '1',
   '2
 ]
}

конечно же...

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

пока что я не хочу ламать совместимость по конфигам так что новый формат не вариант.

cvv ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Когда-то делал аналогичную штуку. Только делал не eval, а Storable qw/thaw freeze/; Теперь мне нравится YAML::Tiny.

helios ★★★★★
()

Тэги вроде правлосавнее через запятую.

anonymous
()

И чего только люди не изобретут, лишь бы Erlang не использовать, где уже все инструменты в рантайм встроены...

anonymous
()
Ответ на: комментарий от anonymous

В рантайм языка встроена работа с текстовыми файлами в формате «key=value»? Да, совершенно неясно, почему Erlang никто не использует.

anonymous
()

Я делаю вот так. Объявляем хеш, со значениями из конфига. Часть значений у меня обязательны и могут быть дефолтными, часть добавится потом, если указаны в конфиге.

my %component_config = (
        # Если не получилось подключить конфиг, эта переменная указывает на то, что мы используем значения по умолчанию.
        default         => '1',
        debug           => '1',
        logfile         => 'stdout',
);
Читаем конфиг. В качестве аргументов принимает путь к файлу конфига и ссылку на хеш, который будет заполняться значениями из конфига. Комментарии в конфиге начинаются с решётки и игнорируются. Пустые строки, лишние пробелы и т.д. тоже. После окончания работы функции получаем хеш, заполненный значениями из конфига.
sub fill_config {
        my $configfile = $_[0];
        return 0 unless open(SOURCE, "< $configfile");
        # Раз мы продолжаем работать, значит конфиг удачно прочитался и настройки не дефолтные.
        $_[1]{default} = 0;
        while (<SOURCE>) {
                chomp;
                s/(#.*|^\s+|\s+$)//g;
                next unless length;
                my ($var, $value) = split(/\s*=\s*/, $_, 2);
                $_[1]{$var} = $value;
        }
        close(SOURCE);
        return 1;
}
Таким образом одна и та же функция позволяет читать какие угодно конфиги в рамках программы(у меня софтинка с множеством автоподключаемых модулей, и у каждого из них может быть свой конфиг).

shell-script ★★★★★
()

А я бы порекомендовал JSON

use JSON;
my $perl_scalar = decode_json($json_text);
Skvor
()

У меня свой парсер ini-like файлов - 100 строк кода всего навсего. Минусы eval - можно зафигачить system(«rm -rf»). Минусы json - свалится при кривом синтаксисе (надо приличное время тюнинговать по себя).

gh0stwizard ★★★★★
()

Config::General, Config::Auto

AITap ★★★★★
()
while (<$configfile>) {
  /(\w+)=(\w+)/;
  $config{$1}=$2;
}
redgremlin ★★★★★
()

Пиши конфиг на перле (как модуль) и подгружай его. Как на шелле и делается. См. пример у gitweb.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.