外部から設定ファイルを読み込む方法はいろいろあるが、一番お手軽なのは Config::Any モジュールを使うことだ。このモジュールを使うと様々な形式のファイルを一つの命令で読むことが出来る。
コード例
load_stems メソッド
基本は、これを使っておけば間違いない。stems オプションに指定した文字列に、対応した拡張子を自動的に補ってファイルを探してくれる。
#!/usr/bin/perl
use strict;
use warnings;
use Config::Any;
use YAML::Syck;
my $cfg = Config::Any->load_stems( {
stems => [qw! config !],
use_ext => 1,
flatten_to_hash => 1,
} );
print Dump $cfg;
load_files メソッド
読み込むファイルを指定したいときはこれ。files オプションには複数のファイル名を指定でき、その中で存在するファイルだけが読み込まれる。
my $cfg = Config::Any->load_files( {
files => [qw!
config.json
config.yml
!],
use_ext => 1,
flatten_to_hash => 1,
} );
出力例
---
config.json:
data1: VALUE1
data2:
data20: VALUE20
data21:
- VALUE21
- VALUE22
config.yml:
data1: VALUE1
data2:
data20: VALUE20
data21:
- VALUE21
- VALUE22
設定ファイルの例
標準では以下の6つの形式に対応している。INI 形式を除いて、全て同じ内容を表している。
Apache 形式(拡張子 .cnf、.conf)
data1 VALUE1
<data2>
data20 VALUE20
data21 VALUE21
data21 VALUE22
</data2>
INI 形式(拡張子 .ini)
この形式では配列を使うことが出来ない。以下の例で言えば、4 行目の設定は 5 行目で上書きされてしまう。
data1=VALUE1 [data2] data20=VALUE20 data21=VALUE21 data21=VALUE22
JSON 形式(拡張子 .jsn、.json)
{
"data1": "VALUE1"
,"data2": {
"data20": "VALUE20"
,"data21": [
"VALUE21"
,"VALUE22"
]
}
}
Perl 形式(拡張子 .pl、.perl)
{
data1 => "VALUE1",
data2 => {
data20 => "VALUE20",
data21 => [qw!
VALUE21
VALUE22
!],
},
};
XML 形式(拡張子 .xml)
<?xml version="1.0"?>
<config>
<data1>VALUE1</data1>
<data2>
<data20>VALUE20</data20>
<data21>VALUE21</data21>
<data21>VALUE22</data21>
</data2>
</config>
YAML 形式(拡張子 .yml、.yaml)
---
data1: "VALUE1"
data2:
data20: "VALUE20"
data21:
- "VALUE21"
- "VALUE22"
