История изменений
Исправление router, (текущая версия) :
А что сложного?
my %changes = {
'param1' => 'value1',
'param2' => 'value2',
};
my %config;
# считываем и парсим конфиг
my $CONFFILE;
open $CONFFILE, "$conf_file_name";
while ( my $line = <$CONFFILE> ) {
if ( $line =~ m/^\s*(\S+)\s*=\s*(\S+)\s*$/ ) {
my $param = $1; my $value = $2;
$config{$param} = $value;
};
};
close $CONFFILE;
# применяем %changes
for my $param ( keys %changes ){
$config{$param} = $changes{$param};
};
# записываем результат
open $CONFFILE, ">$conf_file_name";
for my $param (sort keys %config) {
PRINTF $CONFFILE "%s = %s\n", $param, $config{$param}
};
close $CONFFILE;
Или даже так
my @config;
my $CONFFILE;
open $CONFFILE, "$conf_file_name";
while ( my $line = <$CONFFILE> ) {
chomp $line;
for my $param ( keys %changes ) {
# если нашли подходящую строку - правим её.
if ( $line =~ m/^\s*${param}\s*=/ ) {
my $line = sprintf "%s = %s\n", $param, $changes{$param};
delete $changes{$param};
};
push @config, $line;
};
};
close $CONFFILE;
# если подходящую строку не нашли, дописываем новый параметр в конец
for my $param ( keys %changes ) {
push @config, sprintf( "%s = %s\n", $param, $changes{$param});
};
# ну и потом записываем @config в файл
З.Ы. код писал прямо в окне добавления комментария, не отлаживал
Исходная версия router, :
А что сложного?
my %changes = {
'param1' => 'value1',
'param2' => 'value2',
};
my %config;
# считываем и парсим конфиг
my $CONFFILE;
open $CONFFILE, "$conf_file_name";
while ( my $line = <$CONFFILE> ) {
if ( $line =~ m/^\s*(\S+)\s*=\s*(\S+)\s*$/ ) {
my $param = $1; my $value = $2;
$config{$param} = $value;
};
};
close $CONFFILE;
# применяем %changes
for my $param ( keys %changes ){
$config{$param} = $changes{$param};
};
# записываем результат
open $CONFFILE, ">$conf_file_name";
for my $param (sort keys %config) {
PRINTF $CONFFILE "%s = %s\n", $param, $config{$param}
};
close $CONFFILE;
Или даже так
my @config;
my $CONFFILE;
open $CONFFILE, "$conf_file_name";
while ( my $line = <$CONFFILE> ) {
chomp $line;
for my $param ( keys %changes ) {
# если нашли подходящую строку - правим её.
if ( $line =~ m/^\s*${param}\s*=/ ) {
my $line = sprintf "%s = %s\n", $param, $changes{$param};
delete $changes{$param};
};
push @config, $line;
};
};
close $CONFFILE;
# если подходящую строку не нашли, дописываем новый параметр в конец
for my $param ( keys %changes ) {
push @config, sprintf( "%s = %s\n", $param, $changes{$param});
};
# ну и потом записываем @config в файл
З.Ы. код писал прямо в окне добавления комментария, не отлаживал