我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果有,它会从中读取,如果没有,它会根据我为它制作的模板创建一个。
我将 Config::Simple 用于 ini 部分。
我的问题是,如果我查找该文件并且它存在,我如何确保其读取的 ini 具有应该存在的所有正确设置名称?
如果 ini 不存在,它将从我的模板中读取,该模板将始终是最新的,但是如果我在我的代码中添加一个新设置并且他们的 ini 已经存在,我需要能够将新设置添加到他们的。
有什么意见吗?
我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果有,它会从中读取,如果没有,它会根据我为它制作的模板创建一个。
我将 Config::Simple 用于 ini 部分。
我的问题是,如果我查找该文件并且它存在,我如何确保其读取的 ini 具有应该存在的所有正确设置名称?
如果 ini 不存在,它将从我的模板中读取,该模板将始终是最新的,但是如果我在我的代码中添加一个新设置并且他们的 ini 已经存在,我需要能够将新设置添加到他们的。
有什么意见吗?
您可以将 INI 数据加载到哈希中并根据您的要求检查哈希键:
my %config;
Config::Simple->import_from('settings.ini', \%config);
my @requirements = qw< foo bar baz quux >;
for ( @requirements ) { # Verify
warn( "Parameter '$_' is missing from INI" )
unless exists $config{$_};
}
如果您需要覆盖默认设置,将默认设置保存在哈希中将允许您执行此漂亮的单行:
my %settings = ( %defaults, %config ); # %settings contains defaults + overwrites
为了清晰地分离关注点,人们可能会考虑将其全部放入一个子例程中:
use Config::Simple;
sub get_settings {
my ( $ini_file ) = @_;
state %defaults = ( foo => 1, bar => 2 ); # 'state' needs Perl 5.10+
state @requirements = qw< foo bar baz quux >;
my %config;
Config::Simple->import_from( $ini_file, \%config);
for ( @requirements ) { # Verify presence of necessary parameters
next if exists $config{$_};
warn( "Parameter '$_' is missing from INI" );
return %defaults;
}
my %settings = ( %defaults, %config );
return %settings;
}