Perl モジュールと同じ場所にある設定ファイルを読み込む このエントリーをはてなブックマークに追加

ブログがあまりにもほったらかしすぎなので、今後は極力些細な内容でも積極的にエントリを上げていこうと思います。

Perl での開発で、自分で作っているモジュールのファイルと同じ場所にあるファイルを設定ファイルとして読み込みたい場合があります。その設定ファイルも Perl モジュールとして書いてしまうのはやり方としては悪くないのですが、単なる定数値の羅列としてではなく、 YAML などで書きたくなるような若干複雑な構造のファイルもあるので、その場合、ファイルの場所を特定する方法が必要になります。

読み込まれたモジュールファイルの場所は、 %INC 特殊変数に記録されています。キーに、モジュールのファイル名を指定すれば、そのファイルの場所を取得できます。

%perl -Mstrict -e 'print qq/$INC{"strict.pm"}\n/'
/usr/local/lib/perl5/5.8.9/strict.pm
%

モジュールファイルがカレントディレクトリにある場合、その値はキーと同じファイル名のみになるようです。

%INC はそのモジュールファイルの読み込みを開始する時点で既にセットされるようなので、自身のモジュールファイル内であれば、たとえ BEGIN 節であっても参照できます。

package Hoge;

BEGIN {
    print "$INC{'Hoge.pm'}\n";
}

1;

設定ファイルの場所を特定して読み込むのは、以下の要領で書けば実現できるでしょう。

package Hoge;
use strict;
use YAML;

BEGIN {
    my $conf_path = ($INC{'Hoge.pm'} =~ (m!^((?:.+/)?)Hoge.pm$!)[0] . '/conf.yml';
    my $yaml = LoadFile($conf_path);

    # ...処理...
}

# ...

1;

2011 年 8 月 30 日 by 村山 俊之

タグ:

コメントをどうぞ