2009-09-01 7 views
1

で配列参照を含む複雑なPerlのデータ構造を表現:私はPerlコードに次のようなデータ構造を持っているコンフィグ::一般

my $config = { 
    'View::Mason' => { 
     comp_root  => [ 
      [ 'teamsite' => 'root/teamsite' ], 
      [ 'components' => 'root/components' ], 
     ], 
    }, 
}; 

私はConfig::General設定ファイルにこの構造を表現しようとしています。

は、これまでのところ私が持っている:

少なくとも「comp_root」要素配列リファレンスになりますが、私はそれが別の配列参照を指すように取得することはできません
<View::Mason> 
    <comp_root> 
     teamsite  root/teamsite 
    </comp_root> 
    <comp_root> 
     components  root/components 
    </comp_root> 
</View::Mason> 

これはConfig :: Generalで実行できますか?

+0

うーん...それに掘り後、もう少し答えがあるようだ「あなたが行うことができないコンフィグ::全般と」 – Hissohathair

答えて

4

私はConfig :: Generalで可能ではないと思います。たとえば:

use Config::General qw(SaveConfigString); 

my $config = { 
    'View::Mason' => { 
     comp_root  => [ 
      [ 'teamsite' => 'root/teamsite' ], 
      [ 'components' => 'root/components' ], 
     ], 
    }, 
}; 

print SaveConfigString($config); 

はそれを保存することができない場合は、オッズはそれをロードすることはできませんです

<View::Mason> 
    comp_root ARRAY(0x94ea168) 
    comp_root ARRAY(0x94fbc98) 
</View::Mason> 

生成します。ここで

は、私がどうなるのかです:私は私の設定ファイルは次のようになりたいもの

  1. 図アウト。
  2. このような設定ファイルをロードできるモジュールを探します。 (ロードするのが難しいと判明した場合は、フォーマットを変更する可能性があります)
  3. ステップ2の結果が他のプログラムで直接使用できない場合は、設定リーダーが与えるものを変換するコードを書きます私のプログラムが望んでいるものに私を入れてください。
+0

私はConfig :: Generalに今のところロックされていますが、次のプロジェクトの良いアプローチのように聞こえます。私がここでやるべきことは、モジュールが必要とする最終的なデータ構造に複数の設定をマージするための後処理です。 ありがとうございます。 – Hissohathair

1

YAMLはあなたのためのオプションであるかもしれない:

use strict; 
use warnings; 
use Data::Dumper qw(Dumper); 
use YAML::XS qw(Load); 

my $config_text = ' 
View::Mason: 
    comp_root: 
    - 
     - teamsite 
     - root/teamsite 
    - 
     - components 
     - root/components 
'; 

my $config = Load($yaml_text); 
print Dumper($config); 
+2

YAMLは任意のPerlデータ構造を表すことができますが、必ずしも最も使いやすい設定ファイルフォーマットであるとは限りません。 (私は複雑なデータ構造を含む必要がある設定ファイルのために使用していますが) – cjm

+0

Raw PerlはYAMLよりも面白いです。少なくとも空白は重要ではない derobert

関連する問題