外部から設定ファイルを読み込む方法はいろいろあるが、一番お手軽なのは 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"