2012-02-22 17 views
0

私はini形式の設定を解析するために使用できるConfig::InifilesConfig::Simpleのようなモジュールがあることを理解しています。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

+0

こんにちは@obmib、私の仕様に基づいて、モジュールがconfigファイルを解析する必要があることを意味します。私はドキュメントを見て、私たちが変更できないconfigの構造に関する特定の規則の実施があることを確認します。私はいくつかのフォーマットを認識する[Config :: Any](http://search.cpan.org/~bricas/Config-Any-0.23/lib/Config/Any.pm)を使用していますので、私の問題は解決されています。 – Unos

+0

あなたは下の回答としてあなたの解決策を投稿して、未回答のリストから取り除くことができますか?ありがとう。 –

答えて

1

答えはNoです:Config :: Generalを使用してiniファイルを解析することはできません。そのドキュメントから、私はConfig :: Generalが特定のルールセットに従ったファイルの解析をサポートしていること、そして別のフォーマットを読み込むように設定することができないことを知っています。

Apacheスタイルの設定、またはキーと値のペアだけを持つrcfileを読みたい場合は、Config:Generalがあなたのためのモジュールです。しかし、iniファイルを読むには、Config::Inifilesに行きます。同様に、XML::SimpleはXMLファイルの解析に役立ちます。

私が解決しようとしていた主な問題は、これは私のPerlスクリプトを使ってデータベースリソースと対話したいということでした。私はdbname、username、passwordなどのデータベースの資格情報を設定ファイル経由で取得しますが、設定の形式を制御することはできません。つまり、スタイル/言語が透明であることを意味します。設定に必要なキーが表示されます。

ここでは2つのモジュールが見つかりました:​​とConfig::Autoです。これらは基本的に、言語固有のConfig :: *モジュールのラッパーです。したがって、configの構造に基づいて、彼らは型を推測し、それに応じて解析します。

私は個人的には、文法が少ないのでConfig :: Autoが好きですが、どちらも問題を解決します。