設定ファイル config.cf MLごとの設定ファイル config.cf 各MLごとにさまざまなカスタマイズをすることができます。 この点は &fml4; でも &fmldevel; でも同様です。 そのために &fml4; では 各MLのホームディレクトリ $DIR に config.ph というファイルがあります。 これは .ph という名前でわかる通り perl script です。 &fmldevel; では config.cf 一つです。 フォーマットは postfix や .ini 風の 変数 = 値 &fml4; の諸問題 &fml4; の perl script 方式にはいくつか問題があります。 例えば perl script なので、perl が許す限りの自由な書き方ができます。 これは人間にとっては嬉しいのですが、 機械処理の観点からは問題です。というのは makefml や CGI をはじめとする設定インターフェイスを書きにくいのです。 そこで &fml4; では、 cf というファイルと config.ph という 2 つのフォーマットの異なるファイルが使われています。 しかし、これはこれで2つのファイルに分かれてしまう点が 保守しにくさを生みます。 よって &fmldevel; では、 設定インターフェイスにやさしい新フォーマットを提唱します。 それが config.cf です。 これは本質的に postfix 風のフォーマットです。 config.cf のフォーマット config.cf のフォーマットは /etc/fml/main.cf と同様です。 変数名 = 値 変数名 = 値1 値2 値3 変数名 = 値1 値2 値3 のようにスペースないしは改行で区切って複数の値を書くことができます。 変数定義内での $ による変数の展開も可能です。 例えば a = 値1 b = $a/値2 は最終的に a = 値1 b = 値1/値2 と解釈されます。 展開は、すべての変数定義を読み込んだ後に行なわれます。 そのため、以下のような定義をすると a = 値1 b = $a/値2/$c c = 値3 a = 値4 次のように b = 値4/値2/値3 と解釈されます。 postfix style のさらなる拡張 変数名 += 値 変数名 -= 値 で、特定の値の足し引きができます。 x = a b c d x -= b x = a c d などとなる。 また x = a b c d x += e x = a b c d e などとなる。 config.cf の多重読み込み(変数定義の上書き) 複数の config.cf を読み込み、定義の上書きを行なうことができます。 これを利用して 『デフォルトの定義』、 『サイト固有の定義』、 『ドメイン固有の定義』 などを別のファイルに分離することができます。 デフォルトではいくつかの .cf ファイルに分離されています。 fml は起動時にそれらのファイルを順番に読みこみ、 最後にML固有の config.cf を読み込みます。 そして、その後に変数の展開処理を行ないます。 展開後に変数を代入すると? $ をふくむ変数の値の代入が行なわれると、 次に値を取り出すメソッド perl の tie 操作 が呼ばれた際に、変数の再展開が行なわれます。 例えば $config->{ key } = '$ml_home_dir/value'; という代入処理が行なわれると、次に $config->{ another_key } (キーはなんでもよい)メソッドが呼ばれた際に再評価されることになります。 内部構造: 変数展開 内部構造の話をすると、 まず %_fml_config に キーと値 の組が保存されます。 これは $dir/$file のような形式のままです。 get() はこのハッシュではなく %_fml_config_result の値を返しています。 このハッシュ中の値は $dir などが展開された後の値で、 /var/spool/ml/elena/file などとなっています。 この変数の値の展開は get() なりで呼ばれた時に始めて行なわれます。 変数一覧 (alphabetical order) &table.list.variables;