一个简单的技巧/方法来修改Perl中INI文件中某个部分的参数值

时间:2011-11-29 21:45:09

标签: perl parameters ini

我正在寻找一个简单的技巧/方法来修改Perl中INI文件中某个部分的参数值,您可能知道,INI文件中的所有参数都具有相同的名称(这是它的大问题),只有部分名字可以有所作为,但我不认为它会对我的情况有所帮助:

SECTION1

的param1 = s1value1

param2的= VAL1

第2节

的param1 = s2value2

param2的= val2的

Section3中

的param1 = s3value3

param2的= VAL3

我想将Section2的参数param2的值val2更改为valN,任何想法,我在CPAN上查看模块,但是模块需要模块等等,我从来没有工作过,我认为有一个简单的方法hein ?

2 个答案:

答案 0 :(得分:1)

这看起来像一个非标准的INI文件,其中的部分用方括号表示:[Section Name]。但是,不包含等号的行很容易成为规范。

所以这里有一个sub来搜索section和keyname并更改值。

sub new_ini_value { 
    my ( $input, $output, $section, $keyname, $new_value ) = @_;
    my $curr_sect = '';
    SEARCH:
    while ( <$input> ) { 
        if ( m/^\s*([^=]*?)\s*$/ ) { 
            $curr_sect = $1;
        }
        elsif ( $curr_sect eq $section )  { 
            my ( $key, $value ) = m/^\s*([^=]*[^\s=])\s*=\s*(.*?\S)\s*$/;
            if ( $key and $key eq $keyname  ) { 
                print $output "$keyname=$new_value\n";
                last SEARCH;
            }
        }
        print $output $_;
    }
    use English qw<$RS>;
    local $RS;
    print $output ( <$input> );
}

答案 1 :(得分:0)

尝试使用Config::Tiny

use Config::Tiny;

my $filename = "test.ini";
my $config = Config::Tiny->new();
$config = Config::Tiny->read($filename);
print "Before:\n";
print $config->write_string();

$config->{Section2}->{param2} = 'valN'; 
print "After:\n";
print $config->write_string();

$config->write($filename);