前回の
設定ファイルの利用
ここでは,
設定ファイルはなぜ必要か
コマンドラインツールでは,
設定値を渡す方法として,
それに対して設定値を設定ファイルとして持つようにすると,
設定ファイルの形式
Perlで書かれたコマンドラインツールの設定ファイルには,
表1設定ファイルによく使われる形式
形式 | 特徴 |
---|---|
JSON | プログラムによる解釈が簡単。人間が読みづらくなる場合がある |
YAML | インデントといくつかの記号で構造を表す。比較的人間が読みやすい |
TOML | シンプルな記法。複雑な構造の記述には向いていない |
Perl | Perlコードそのもの。データの表現力は高いがPerlコードを書ける人でないと使えない |
Perlコードを設定ファイルとして使う方法
Perlコードを設定ファイルとして使う場合,
config.
+{
dbi => ["dbi:mysql:database=foo", "user", "pass"],
filepath => '/path/to/file',
};
設定ファイルを利用するプログラムでは,
my $config = do 'config.pl';
$config->{filepath}
# => /path/to/file
Perlコードを設定ファイルとして使う利点は,
my $conf = {
path => '/path/',
};
# 分岐と環境変数の利用
if ($ENV{TEST}) {
$conf->{debug} = 1;
}
$conf;
ただし逆に言えば,
JSON/ YAML/ TOMLを設定ファイルとして使う方法
設定ファイルとして何らかの記法で記述されたファイルを使う場合,
例として,
read_
my $opt = Smart::Options->new
->coerce('File' => 'Str', sub { path($_[0]) })
->type('conf' => 'File')->parse();
unless ($opt->{conf}) {
my $default_conf = +{
file => '/path/to/file',
rows => 10,
};
path('.config')->spew(encode_json($default_conf));
print "write default config => .config\n";
exit;
}
my $config = decode_json($opt->{conf}->slurp());
# 以下,コマンドラインツールの実際の処理
このコードでは,conf
オプションが指定されなかった場合,.config
という名前で設定ファイルを作成し,