Автор:
n4n
Описание:
Язык: Perl
package ReadConfig;
use strict;
use warnings;
# Конструктор
sub new
{
my $class = shift || __PACKAGE__;
my $self;
$self->{cfg} ||= 'default.cfg';
bless $self;
$self->_readAndLoadToHash;
return $self;
}
# Прочесть файл конфигурации и поместить данные во временный хеш
sub _readAndLoadToHash
{
my $self = shift;
open( FH, '<', $$self{cfg} ) or die $!;
while( <FH> )
{
chomp; s/\s+//g; s/#.*//;
if( /^[fcr]:/ )
{
my @el = split /:/;
$self->{TEMP}{$el[0]}{$el[1]} = [ split /\,/, $el[2] ];
}
if( /^([ug]):(\w+){/ )
{
$self->{p1} = $1;
$self->{p2} = $2;
}
elsif( ! /^\w{1}:/ && /(\w+):(\S+)/ )
{
$self->{TEMP}{$$self{p1}}{$$self{p2}}{$1} = [ split /\,/, $2 ];
}
}
close FH;
# перечитать данные временнога хеша,
# по необходимости сделать подстановку значиние констант &,@,$ или исключить при !элемент
# и заполнить новыми данными оснавной хеш
foreach my $ug( grep { /^[ug:]/ } keys %{$self->{TEMP}} )
{
foreach my $usr( keys %{$self->{TEMP}{$ug}} )
{
foreach my $cat( keys %{$self->{TEMP}{$ug}{$usr}} )
{
foreach my $res( @{$self->{TEMP}{$ug}{$usr}{$cat}} )
{
if( $res =~ /^\&(\w+)/ )
{
push @{$self->{GENERAL}{$ug}{$usr}{$cat}}, @{$self->{TEMP}{f}{$1}};
}
elsif( $res =~ /^\@(\w+)/ )
{
push @{$self->{GENERAL}{$ug}{$usr}{$cat}}, @{$self->{TEMP}{c}{$1}};
}
elsif( $res =~ /^\$(\w+)/ )
{
push @{$self->{GENERAL}{$ug}{$usr}{$cat}}, @{$self->{TEMP}{r}{$1}};
}
elsif( $res =~ /^\!(\w+)/ )
{
@{$self->{GENERAL}{$ug}{$usr}{$cat}} = grep { ! /$1/ } @{$self->{GENERAL}{$ug}{$usr}{$cat}};
}
else
{
push @{$self->{GENERAL}{$ug}{$usr}{$cat}}, $res;
}
}
delete $self->{TEMP}{$ug}{$usr}{$cat};
}
delete $self->{TEMP}{$ug}{$usr};
}
delete $self->{TEMP}{$ug};
}
delete $self->{TEMP};
# пользователей из групп поместить отдеьно в {GENERAL}{u}
if( exists $self->{GENERAL}{g} )
{
foreach my $grp( keys %{$self->{GENERAL}{g}} )
{
foreach my $usr( @{$self->{GENERAL}{g}{$grp}{user}} )
{
$self->{GENERAL}{u}{$usr}{file} = \@{$self->{GENERAL}{g}{$grp}{file}};
$self->{GENERAL}{u}{$usr}{content} = \@{$self->{GENERAL}{g}{$grp}{content}};
$self->{GENERAL}{u}{$usr}{resource} = \@{$self->{GENERAL}{g}{$grp}{resource}};
}
}
}
}
sub GetInfo
{
my( $self,$arg ) = @_;
my( $k,$v ) = split /:/, $arg;
return @{$self->{GENERAL}{u}{$k}{$v}};
}
1;
|
Последние размещения:
123123123 (PHP)
ksurent (Perl)
ksurent (Bash)
guata (Plain Text)
biophreak (Plain Text)
Raik (PHP)
MUSbKA (Plain Text)
MUSbKA (Plain Text)
nekitozzz (C++)
nekitozzz (Plain Text)
nekitozzz (C++)
ksurent (Perl)
MUSbKA (C++)
stalin_alex (C++)
dzantiev (Plain Text)
unreal (C++)
eug2b (Plain Text)
|