perl проверить синтаксис структуры данных - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть файлы конфигурации для моих сценариев, содержащих огромные структуры данных, например:

foo  =>  'bar',
one  =>  'two',
bla  =>  [
           'something',
           'else',
         ],
bli  =>  {
           here  =>  {
                       'and'  => 'there',
                       'also' => 'here',
                     },
         },
etc.

Я загружаю эти файлы конфигурации, используя простые, например:

%hash = do 'config.file';

Моя проблема : когда пользователи изменяют этот файл конфигурации, они могут испортить его, забыв запятую, скобки или что-то еще, это может иметь ужасные последствия, так как переменные впоследствии будут выглядеть пустыми в скрипте (я не хочу проверять наличие каждая переменная ..)

есть ли способ "проверить" синтаксис такого файла / структуры во время загрузки или сразу после загрузки? любой модуль делает это?

Полагаю, я мог бы добавить значение внизу и проверить наличие этого значения, но оно немного грязное.

спасибо!

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Это должно быть читаемым с Perl? (тогда не должно ли быть запятая после записи b1?) Тогда способ проверить это - передать ее eval и затем проверить значение $@. Менее небезопасный способ - отформатировать конфигурацию в другом популярном, читаемом, доступном для записи, понятном формате сериализации данных. Формат JSON соответствует этим критериям.

1 голос
/ 18 февраля 2020

Rx предназначен для проверки схемы документов JSON / YAML, но поскольку он работает в структуре данных в памяти, а не в файле, его можно использовать с произвольными форматами файлов конфигурации. (Это также означает, что он не может проводить определенные различия, такие как использование true против 1 в YAML / JSON.)

...