在Perl裏面使用YAML作配置文件

在選擇配置文件的時候,咱們有多個選擇:XML,ini,Json,YAML,還有就是自定義一種。html

爲何選YAML呢?緣由以下:數組

1. 需求:須要能表示略複雜數據結構的配置文件:散列和數組的嵌套。數據結構

2. XML很是好,支持也很是好,可是若是我想要把改好的xml文件從新寫入的時候,就變成噩夢了,我要嘗試從新生成的xml文件是否能被系統識別。spa

3. ini和自定義的那種鍵值對形式,都不能知足須要,沒有辦法作到散列數組的嵌套。.net

4. Json是個很好的選擇。可是須要寫不少無謂的大括號來顯式的標註數據結構。以爲很沒有必要。unix

最後,我是選用YAML,由於他可以避開上面的因此問題,並且直觀簡潔。code

 

如今選取什麼樣的模塊來完成個人需求,由於在我當前用的Perl 5.10版本下,YAML的模塊都是要從CPAN上安裝,選型有以下網頁參考http://fanqiang.chinaunix.net/program/perl/2007-02-05/4940.shtmlxml

選擇的結果:htm

1. 彷佛YAML::XS彷佛是要對文件進行一個流處理,也就是用File::Slurp讀入一個標量中,才能繼續。blog

2. YAML::Tiny彷佛對於散列的數組,不能很好的支持,很遺憾Ether大神對不住了,也許我這裏錯了,可是時間不容許繼續深刻嘗試下去。

3. Config::YAML彷佛七年沒更新了,實在不敢用。

YAML和YAML::Syck徹底能知足需求,能夠在這兩個模塊的CPAN上的頁面查看他們的差異,彷佛YAML::Syck速度很快,由於這是用C的擴展寫的。YAML支持yml文件的全部特性。而且兩個模塊都支持LoadFile方法:也就是說,咱們的代碼幾乎能夠寫的同樣:

!/usr/bin/perl
use strict;
use warnings;
use YAML qw(LoadFile);
#use YAML::Syck;

use Data::Dumper;

my $yaml = LoadFile("john.yml");
print Dumper($yaml)

很簡單吧,這樣直接吧yml文件裏面的所有內容load到一個hash裏面去了,下面在看下這個hash的寫法:

name: john
age: 24
spouse:
  -name: jane
  age: 22
children:
  -name: jimmy
  age: 11
  -name: jenny
  age: 12

注意最後必定是要有一個新的換行符。這樣就可以徹底表達咱們的需求:散列數組的散列。

還有其餘更有趣的內容,能夠參考文檔https://metacpan.org/pod/distribution/YAML/lib/YAML.pod和https://metacpan.org/pod/YAML::Syck

 

enjoy

相關文章
相關標籤/搜索