Работа с конфигурационными файлами в Perl

Модулей в Config::Namespace на CPAN много, но все они так или иначе ограничены.

В настоящее время я использую Config::Std, что в большинстве случаев нормально, однако это усложняет некоторые вещи:

  • более двух уровней вложенных директив
  • обработка нескольких значений на ключ
  • conf.d, то есть несколько файлов конфигурации, которые объединены в один большой хэш конфигурации.

Config::Std генерирует благословленный хэш-ссылку после анализа конфигурации, поэтому все мои приложения закодированы так, чтобы использовать хэш-ссылку для конфигурации. Я бы предпочел не менять это.

Я ищу универсальный, легкий модуль конфигурации, который создает хэш-ссылку.

Мой вопрос: какие модули конфигурации следует рассмотреть для замены Config::Std?


person tex    schedule 11.05.2011    source источник


Ответы (3)


Вы не указали, откуда берутся ваши данные. Вы читаете файл конфигурации и сталкиваетесь с ограничениями самого файла конфигурации?

Config::Std — отличный модуль. Однако он предназначен для чтения и записи файлов Windows Config/INI, а файлы Windows Config/INI имеют очень плоский и простой формат. Таким образом, я не ожидал, что Config::Std сделает намного больше.

Если вы используете файлы Windows Config/INI прямо сейчас, но в будущем вам может понадобиться читать более сложные структуры данных, Config::Any — это хороший способ. Он будет обрабатывать файлы Windows Config/INI и, используя тот же программный интерфейс, читать и записывать файловые структуры XML, YAML и JSON.

Если вы просто пытаетесь сохранить сложную структуру данных в своей программе и не заботитесь о чтении и записи файлов конфигурации, я бы порекомендовал взглянуть на XML::Simple по очень простой причине, что это... ну... , простой и может обрабатывать все виды структур данных. Кроме того, XML::Simple — очень часто используемый модуль, поэтому в Интернете можно найти много помощи, если у вас возникнут какие-либо вопросы по этому модулю, и он активно поддерживается.

Вы можете использовать Config::Any, но я нахожу его более сложным в использовании и сложнее в настройке. На самом деле вам нужно установить XML::Simple (или аналогичный модуль), чтобы использовать его. Преимущество Config::Any в том, что это единый интерфейс для всех форматов файлов конфигурации. Таким образом, вам не придется взламывать вашу программу, если вы решите переключиться с Windows Config/INI на XML или YAML.

Итак, если вы сейчас работаете с файлами Windows Config/INI и нуждаетесь в более сложной структуре данных: посмотрите на Config::Any.

Если вам просто нужен простой способ отслеживания сложных структур данных, обратите внимание на XML::Simple.

person David W.    schedule 11.05.2011
comment
Config::Any отлично подходит для чтения различных форматов файлов конфигурации, но не предоставляет ловушку для записи конфигурации обратно на диск. (Пожалуйста, поправьте меня, если я пропустил это) - person spazm; 08.12.2012

Config::Any (для загрузки нескольких файлов и сведения к хешу) и его Config::General (для произвольно вложенных элементов конфигурации и нескольких значений для каждого ключа а-ля http://httpd.apache.org/docs/2.2/en/configuring.html#syntax)

person daxim    schedule 11.05.2011

YAML справится с этим и многим другим.

И вот сайт протокола.

person Axeman    schedule 11.05.2011