2013-04-03 6 views
6

In Perl che posso fare qualcosa di simile al seguente:String interpolazione in YAML

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

Posso fare qualcosa come il seguente in YAML:

Home: /home 
Alice: $Home/alice 

Quindi, "Alice" è efficace /home/alice nel fine?

+1

** Consulta anche: ** * https://stackoverflow.com/questions/15777987/ * https://stackoverflow.com/questions/13055753/ * https : //stackoverflow.com/questions/41620674/ * https://stackoverflow.com/questions/4150782/ – dreftymac

+0

** Vedi anche: ** https://stackoverflow.com/a/41620747/42223 – dreftymac

risposta

4

Purtroppo, sei fuori di fortuna. Per fare ciò che si desidera si avrebbe bisogno di passare da un file $home vista (o ovunque) ed interpolare nel vostro ingresso YAML, che potrebbe essere simile a:

Alice: ! '%{home}/Alice' 

Vedere this StackOverflow Q&A per la risposta dettagliata a praticamente esattamente la tua domanda

1

ho finito per usare YAML::AppConfig ma certamente non è una soluzione YAML, ma una soluzione specifica Perl. Consente a YAML di includere $var s che sono interpolati.

+1

+1 per nuova, conoscenza interessante. Prenderò in considerazione l'utilizzo di questa libreria se realizzo un progetto Perl. –

6

Si dovrebbe usare template ERB.

si può scrivere come segue:

Alice: <%=home%>/alice 

Quando l'uso, è necessario analizzare home valore con ERB prima parse come YAML. se home è una variabile locale, è necessario passare l'associazione locale come argomento del metodo #result. se non lo passi, utilizzerà il binding TOP LEVEL come predefinito.

Ti piace questa:

require 'erb' 

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