2013-07-16 68 views
0

我想創建YAML配置。其中我可以放入Perl代碼的文件,以減少多次寫入相同塊的工作量。或用於任何其他操作。我想有這樣的事情我YAML文件中:在YAML文件中嵌入perl

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

由於是顯而易見的,我想關鍵的「富」被分配在這個例子中,值「酒吧」。

這是個好主意還是壞主意?如果是後者,寫這個文件的文件和預處理器的最好方法是什麼?

+0

我不認爲這是一個好主意。這將簡單的標記(就像XML--簡單?或JSON)變成了一個frankenstein怪獸,需要定製處理並可能引入安全漏洞。也許YAML可以基於YAML中的不同*鍵*編碼不同的屬性?例如,也許有一個'調試'鍵和'生產'鍵? YAML消費者然後將選擇適當的密鑰(例如,無論是在$ a中)。另一方面,如果這隻適用於* build配置*,那麼在構建/部署過程中單獨處理(即使是舊的CPP)。 – user2246674

+2

我不得不同意這是一個壞主意。如果你真的想在配置文件中擁有「可執行文件perl」,爲什麼還要涉及到YAML?去'eval'文件的內容,並期望它返回一個hash-ref。不完全安全,但如果你處於封閉的環境中,它可以工作。 –

回答

3

這是不是一個好主意,但可以變得更好。

你有兩種方法:

  1. 對待你的YAML/JSON文件作爲標準的Perl模板系統的一個模板。

    Embperl在我看來是一個不錯的選擇,但是這是因爲它就是我很熟悉。任何支持控制流的模板框架都適合。

    這樣,你不需要編寫自己的語言/語法;並且您以純形式獲得生成的最終YAML/XML/JSON,因此不需要定製解析器。

  2. 創建一個基於Perl的格式。

    E.g.你的配置是一個Perl代碼塊,實質上是一個可評估的(或可用於編程的)代碼塊,從而產生配置散列。

    結果哈希結構CA是你想要的東西,但是如果你希望它是,它可以反映原始JSON/YAML,並可以使用標準的轉換工具轉換成一個。