Как проанализировать конфигурационные файлы в стиле INI, используя Config :: General? - PullRequest
0 голосов
/ 22 февраля 2012

Я понимаю, что есть такие модули, как Config::Inifiles и Config::Simple, которые я могу использовать для анализа конфигураций ini-style.

Но мне было интересно, можно ли настроить Config::General для понимания формата файлов .ini.

Если в ini-файле есть только пары ключ-значение, то Config::General работает нормально, но не может понять комментарии и заголовки разделов.

Я попытался разобрать ini-файл, например:

; Config format
; [CONFIG_NAME]
; key1 = val1
; key2 = val2
; key3 = val3

[cat]
name = tom
likes = jerry

[mouse]
name = jerry
likes = cheese

но вывод из Config::General:

$VAR1 = {
          '[mouse]' => '',
          'name' => [
                      'tom',
                      'jerry'
                    ],
          '[cat]' => '',
          'likes' => [
                       'jerry',
                       'cheese'
                     ],
          ';' => [
                   'Config format',
                   '[CONFIG_NAME]',
                   'key1 = val1',
                   'key2 = val2',
                   'key3 = val3'
                 ]
        };

Есть ли способ сказать Config::General, чтобы правильно проанализировать это?Или это бесполезное упражнение, и я должен переключиться на Config::Inifiles?

1 Ответ

1 голос
/ 22 февраля 2012

Ответ Нет: вы не можете проанализировать INI-файл, используя Config :: General. Из его документации я обнаружил, что Config :: General поддерживает синтаксический анализ файла, который следует только определенному набору правил, и что мы не можем настроить его для чтения в другом формате, и я полагаю, что так и должно быть.

Итак, если вы хотите прочитать конфигурацию в стиле Apache или rcfile, содержащий только пары ключ-значение, тогда Config: General - это модуль для вас. Но если вы хотите прочитать INI-файл, перейдите на Config :: Inifiles . Точно так же XML :: Simple помогает в анализе файлов XML.

Основная проблема, которую я пытался решить, заключалась в следующем: я хочу взаимодействовать с ресурсом базы данных, используя мой Perl-скрипт. Я получу учетные данные базы данных, такие как имя базы данных, имя пользователя, пароль и т. Д. Через файл конфигурации, но я не (не хочу) контролировать формат конфигурации, то есть стиль / язык должны быть прозрачными до тех пор, пока необходимые ключи присутствуют в конфиге.

Я нашел два модуля, которые будут работать здесь: Config :: Any и Config :: Auto . По сути, это обертки вокруг языковых модулей Config :: *. Итак, основываясь на структуре конфига, они угадывают тип и анализируют соответственно.

Я лично предпочитаю Config :: Auto, так как его синтаксис менее многословный, но оба решают проблему!

...