2

我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果有,它会从中读取,如果没有,它会根据我为它制作的模板创建一个。

我将 Config::Simple 用于 ini 部分。

我的问题是,如果我查找该文件并且它存在,我如何确保其读取的 ini 具有应该存在的所有正确设置名称?

如果 ini 不存在,它将从我的模板中读取,该模板将始终是最新的,但是如果我在我的代码中添加一个新设置并且他们的 ini 已经存在,我需要能够将新设置添加到他们的。

有什么意见吗?

4

1 回答 1

3

您可以将 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;
}
于 2013-11-07T07:12:22.770 回答