Config::Simple 4.59 では、ハッシュが空っぽの状態からは 新たに変数を追加できない。
#!/usr/bin/perl use strict; use warnings; use diagnostics; use Config::Simple '-strict'; my $cfg = new Config::Simple; $cfg->read('/tmp/test.conf'); #★ここで空のファイルを読み込む $cfg->param( "ABC", "aaa" ); #★ここでエラー $cfg->write('/tmp/test.conf');
$ ./a.pl Uncaught exception from user code: '_SYNTAX' is not defined at /usr/share/perl5/Config/Simple.pm line 530. at /usr/share/perl5/Config/Simple.pm line 530 Config::Simple::set_param('Config::Simple=HASH(0x2e458)', 'ABC', 'aaa') called at /usr/share/perl5/Config/Simple.pm line 441 Config::Simple::param('Config::Simple=HASH(0x2e458)', 'ABC', 'aaa') called at ./a.pl line 9
ソース
Config::Simple は実はini形式以外にも2,3つくらいフォーマットが選べる。
でも、なんの形式で保存するか決めないといけないので、普通にnewするときは引数で文法(syntax)を指定する必要がある。
readするときは自動で文法を判定するので、通常は指定し忘れてても問題はないが、ファイルが空っぽだとやっぱり文法をど忘れする。
use Config::Simple '-strict'; my $cfg = new Config::Simple(syntax=>'ini'); $cfg->read('/tmp/test.conf'); $cfg->syntax("ini"); #★文法を指定する $cfg->{_SUB_SYNTAX}="simple-ini"; # [default] を出力しないおまじない $cfg->param( "ABC", "aaa" ); $cfg->write('/tmp/test.conf');
文法の指定はsyntax()であとからでも設定できるが、変更すると保存時に別のエラーになるので実質無意味っぽい