Это выглядит как нестандартный INI-файл, который будет иметь разделы, обозначенные квадратными скобками: [Section Name]
. Однако строка, не содержащая знак равенства, является достаточно простой спецификацией.
Итак, подпрограмма, которая ищет раздел и имя ключа и изменяет значение.
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> );
}