2013-04-03 2 views
6

В Perl я могу сделать что-то вроде следующего:Строка интерполяции в YAML

my $home = "/home"; 
my $alice = "$home/alice"; 

Могу ли я сделать что-то вроде следующего в YAML:

Home: /home 
Alice: $Home/alice 

Таким образом, «Алиса» эффективно /home/alice в конец?

+1

** Смотрите также: ** * https://stackoverflow.com/questions/15777987/ * https://stackoverflow.com/questions/13055753/ * HTTPS : //stackoverflow.com/questions/41620674/ * https://stackoverflow.com/questions/4150782/ – dreftymac

+0

** См. также: ** https://stackoverflow.com/a/41620747/42223 – dreftymac

ответ

4

К сожалению, вам не повезло. Для того, чтобы делать то, что вы хотите, вы должны были бы пройти в $home от просмотра файла (или где) и интерполировать его в записи YAML, которые могли бы выглядеть примерно так:

Alice: ! '%{home}/Alice' 

См this StackOverflow Q&A для подробного ответа на в значительной степени точно ваш вопрос.

1

Я закончил с использованием YAML::AppConfig, но, по общему признанию, это не решение YAML, а конкретное решение Perl. Он позволяет YAML включать $var s, которые интерполируются.

+1

+1 для новые, интересные знания. Я буду использовать эту библиотеку, если я создам проект Perl. –

6

Вы должны использовать шаблон ERB.

вы можете написать, как следующее:

Alice: <%=home%>/alice 

При использовании, необходимо разобрать home значение с Еврорадио перед тем, как разборе YAML. Если home является локальной переменной, вам необходимо передать локальную привязку в качестве аргумента метода #result. Если вы не пройдете это, по умолчанию будет использоваться привязка TOP LEVEL.

Как это:

require 'erb' 

home = 'home' 
YAML.load(ERB.new(yaml_content).result(binding)) 
Смежные вопросы