File: //usr/share/perl5/DBMon/Ini.pm
package DBMon::Ini;
# простой парсер ini
# обрезок от Config::Ini::Simple
use strict;
use warnings;
sub new {
my $proto = shift;
my $class = ref($proto) || $proto || 'DBMon::Ini';
my $self = {
__file__ => undef,
__default__ => 'default',
__eol__ => "\n",
__append__ => 1,
@_,
};
bless ($self,$class);
return $self;
}
sub read {
my ($self,$file) = @_;
if (!defined $file) {
$file = $self->{__file__};
return unless defined $file;
}
die "ini file - \"$file\" not found" unless -e $file;
$self->{__file__} = $file;
open (FILE, $file);
my @lines = <FILE>;
close (FILE);
chomp @lines;
my $data = {};
my $block = $self->{__default__} || 'default';
foreach my $line (@lines) {
$line =~ s/\r//g;
$line =~ s/\n//g;
if ($line =~ /\s*\[(.*?)\]\s*/ && !( $line =~ /\=/ ) ) {
$block = $1;
next;
}
next if $line =~ /^\s*\;/;
next if $line =~ /^\s*\#/;
next if length $line == 0;
my ($what,$is) = split(/=/, $line, 2);
$what =~ s/^\s*//g;
$what =~ s/\s*$//g;
$is =~ s/^\s*//g;
$is =~ s/\s*$//g;
$data->{$block}->{$what} = $is;
}
foreach my $block (keys %{$data}) {
$self->{$block} = $data->{$block};
}
return 1;
}
1;