2013-04-03 7 views
6

In Perl ich so etwas wie das tun können, folgende:String-Interpolation in YAML

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

Kann ich so etwas wie die in YAML Folgendes tun:

Home: /home 
Alice: $Home/alice 

So "Alice" ist effektiv /home/alice in der Ende?

+1

** Siehe auch: ** * https://stackoverflow.com/questions/15777987/ * https://stackoverflow.com/questions/13055753/ * https : //stackoverflow.com/questions/41620674/ * https://stackoverflow.com/questions/4150782/ – dreftymac

+0

** Siehe auch: ** https://stackoverflow.com/a/41620747/42223 – dreftymac

Antwort

4

Leider haben Sie kein Glück. Zu tun, was Sie wollen, Sie bräuchten in $home aus einer Sicht-Datei übergeben (oder wo auch immer) und interpolieren es in Ihrem yaml Eintrag, die möglicherweise etwas aussehen könnte:

Alice: ! '%{home}/Alice' 

Siehe für die ausführliche Antwort this StackOverflow Q&A zu ziemlich genau deine Frage.

1

Ich endete mit YAML::AppConfig, aber zugegebenermaßen ist das keine YAML-Lösung, sondern eine Perl-spezifische Lösung. Es ermöglicht, dass YAML $var s enthält, die interpoliert werden.

+1

+1 für neues, interessantes Wissen. Ich werde diese Bibliothek verwenden, wenn ich ein Perl-Projekt mache. –

6

Sie sollten ERB-Vorlage verwenden.

können Sie schreiben, wie folgt:

Alice: <%=home%>/alice 

Bei Verwendung, Sie home Wert mit ERB vor Parse als YAML analysieren müssen. Wenn home eine lokale Variable ist, müssen Sie die lokale Bindung als Argument der #result-Methode übergeben. Wenn Sie dies nicht bestehen, wird TOP LEVEL Bindung als Standard verwendet.

So:

require 'erb' 

home = 'home' 
YAML.load(ERB.new(yaml_content).result(binding))