我正在寻找一个简单的技巧/方法来修改Perl中INI文件中某个部分的参数值,您可能知道,INI文件中的所有参数都具有相同的名称(这是它的大问题),只有部分名字可以有所作为,但我不认为它会对我的情况有所帮助:
SECTION1
的param1 = s1value1
param2的= VAL1
第2节
的param1 = s2value2
param2的= val2的
Section3中
的param1 = s3value3
param2的= VAL3
我想将Section2的参数param2的值val2更改为valN,任何想法,我在CPAN上查看模块,但是模块需要模块等等,我从来没有工作过,我认为有一个简单的方法hein ?
答案 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);