#/usr/bin/perl use strict; use warnings; return 1; sub read_ini { # reads an ini-file # returns a hash containing the key-value pairs my @content; my %lines; my $file=shift; # filename my $name=shift; # name of target topic open(IN,"<$file") or die "$!"; @content=; close(IN); my $i=0; my $n=0; for (@content) { $i++ if /\[.*?\]/io; $n=$i if /\[$name\]/io; $lines{"$1"}="$2" if /^(.*?)\=(.*)$/i and $i==$n; last if $i>$n; } return %lines; } sub change_ini { # changes key-value pairs # returns true when done my @content; my %lines; my $file=shift; # filename my $name=shift; # name of target topic my $key=shift; # target key my $value=shift; # new value open(IN,"<$file") or die "$!"; @content=; close(IN); my $i=0; my $n=0; for (@content) { $i++ if /\[.*?\]/io; $n=$i if /\[$name\]/io; s/(^$key\=)(.*)$/$1$value/i, last if /(^$key\=)(.*)$/i and $i==$n; } open(IN,">$file") or die "$!"; for(@content) { print IN $_; } close(IN); return 1; } sub ins_item_ini { # inserts a new key-value pair # returns true when done my @content; my $file=shift; # filename my $name=shift; # name of topic my $new_kv=shift; # something like admin=123456 open(IN,"<$file") or die "$!"; @content=; close(IN); my $i=0; my $n=0; open(IN,">$file") or die "$!"; for(@content) { $i++ if /\[.*?\]/io; $n=$i if /\[$name\]/io and $n ne '-'; if($n eq $i and $n ne '-') { print IN "$new_kv\n"; print IN $_; $n='-'; } else { print IN $_; } } close(IN); return 1; }