2012-02-22 45 views
0

我知道有像Config::InifilesConfig::Simple這樣的模塊可以用來解析ini風格的配置。如何使用Config :: General解析INI風格的配置文件?

但我想知道是否可以配置Config::General來理解.ini文件的格式。

如果ini文件只有鍵值對,那麼Config::General可以正常工作,但它無法理解註釋和節標題。

我試圖解析像一個ini文件:

; Config format 
; [CONFIG_NAME] 
; key1 = val1 
; key2 = val2 
; key3 = val3 

[cat] 
name = tom 
likes = jerry 

[mouse] 
name = jerry 
likes = cheese 

Config::General輸出:

$VAR1 = { 
      '[mouse]' => '', 
      'name' => [ 
         'tom', 
         'jerry' 
        ], 
      '[cat]' => '', 
      'likes' => [ 
         'jerry', 
         'cheese' 
        ], 
      ';' => [ 
        'Config format', 
        '[CONFIG_NAME]', 
        'key1 = val1', 
        'key2 = val2', 
        'key3 = val3' 
       ] 
     }; 

有沒有辦法告訴Config::General正確解析呢?或者這是徒勞的練習,我應該切換到Config::Inifiles

+1

什麼是「正確?」 [docs](http://search.cpan.org/perldoc/Config::General#COMMENTS)表示不支持這些類型的註釋,是的,Config :: IniFiles確實允許您指定一個備用的「commentchar 「 – obmib 2012-02-22 07:37:55

+0

hi @obmib,我的意思是模塊應該根據我的規範解析配置文件。我瀏覽了文檔,看到有關配置結構的特定規則的實施,我們無法改變。我使用[Config :: Any](http://search.cpan.org/~bricas/Config-Any-0.23/lib/Config/Any.pm)來識別多種格式,所以現在我的問題已經解決了。 – Unos 2012-02-22 08:43:33

+0

您可以將您的解決方案作爲下面的答案發布,以便我們可以從未答覆的列表中獲得此答案嗎?謝謝。 – 2012-02-22 15:10:13

回答

1

答案是否定的:你不能使用Config :: General解析一個ini文件。從它的文檔中,我發現Config :: General支持解析僅遵循一定規則集的文件,並且我們無法將其配置爲讀取不同的格式,我想這就是它的樣子。

所以,如果你想讀取一個Apache風格的配置,或者一個只有鍵值對的rc文件,那麼Config:General就是你的模塊。但是,如果你想讀取一個ini文件,請去Config::Inifiles。同樣,XML::Simple有助於解析XML文件。

我試圖解決的主要問題是:我想用我的Perl腳本與數據庫資源進行交互。我將通過配置文件獲取數據庫憑證,例如dbname,用戶名,密碼等,但我不想(控制)配置的格式,這意味着只要樣式/語言是透明的所需的密鑰存在於配置中。

我發現兩個模塊可以在這裏工作:​​和Config::Auto。這些本質上是圍繞語言特定的Config :: *模塊的包裝。所以,根據配置的結構,他們猜測類型並進行相應的解析。

我個人更喜歡Config :: Auto,因爲它的語法不那麼羅嗦,但都解決了問題!