2013-07-16 3 views
0

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

--- 
    `my $a = 1;` 
    `if($a){` 
    foo: bar 
    `}else{` 
    foo: baz 
    `} 
... 

Как видно, я хочу ключ «Foo», чтобы быть присвоено значение «бар» в этом примере.

Это хорошая или плохая идея? Если последний, что лучше всего записать файл и предварительный процессор для такого файла?

+0

Я не думаю, что это хорошая идея. Это превращает простую разметку (точно так же, как XML - простой? - или JSON) в монстра франкенштейна, который требует специальной обработки и может создавать уязвимости безопасности. Возможно, YAML может кодировать различные свойства на основе разных * ключей * в YAML? Например, может быть, есть ключ «отладки» и «производственный» ключ? Затем потребитель YAML выбирает соответствующий ключ (например, все, что находится в $ a). С другой стороны, если это только для * build configuration *, тогда обрабатывайте это отдельно (даже, скажем, старое CPP) во время процесса сборки/развертывания. – user2246674

+2

Я должен согласиться с тем, что это плохая идея. Если вы действительно хотите иметь «исполняемый perl в файле конфигурации», почему даже задействовать YAML? Идите 'eval' содержимое файла и ожидайте, что он вернет хэш-ref. Не совсем безопасно, но если вы находитесь в закрытой среде, это может сработать. –

ответ

3

Это не очень хорошая идея, но МОЖЕТ быть лучше.

У вас есть два подхода:

  1. Лечить файл YAML/JSON в качестве шаблона для одного из стандартных шаблонизаторов Perl.

    Embperl - хороший кандидат, на мой взгляд, но это потому, что я очень хорошо знаком. Любая структура шаблонов, поддерживающая поток управления, подойдет.

    Таким образом, вам не нужно писать свой собственный язык/синтаксис; И вы получаете готовый финальный YAML/XML/JSON в чистом виде, поэтому нет необходимости в настраиваемом парсере.

  2. Создайте Perl-формат.

    E.g. ваш конфиг - это кусок кода Perl, который по существу является eval -способным (или -able) фрагментом кода, приводящим к хэш-конфигурации.

    Результат hash structure ca будет любым, что вы хотите, но, если вы хотите, он может отражать оригинальный JSON/YAML и может быть преобразован в один с использованием стандартных инструментов преобразования.

Смежные вопросы