$ をふくむ変数に値の代入が行なわれると、 その場では評価されません。
次に、値を取り出すメソッド [1] が呼ばれた際に、初めて変数の再展開が行なわれます。
たとえば
$config->{ key } = '$ml_home_dir/value';という代入処理が行なわれると、次に
$config->{ another_key }(キーはなんでもよい)メソッドが呼ばれた際に、 変数群すべてが再評価されます (たがいに依存関係があるため、すべての変数が評価されなければなりません)。
少し内部構造の話をします。
値の代入操作が行なわれると、 まずは FML::Config の内部変数 %_fml_config に、キーと値の組が保存されます。 これは $dir/$file のような代入した値そのままです。
FML::Config の get() メソッドは、 %_fml_config ではなく %_fml_config_result の値を返しています。 %_fml_config_result 中の値は $dir などが展開された後の値で、 /var/spool/ml/elena/file などとなっています。 この変数の値の展開は get() メソッドなど値を取り出すメソッドが呼ばれた際に初めて行なわれます。
[1] | perl の tie() 操作 |
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >