logo
Автор: 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)
Мы не несем ответственности за текст, размещенный пользователем.
netsago.paste.β © 2009—2012 Neunica