Mercurial > repos > fgiacomoni > bank_inhouse
diff lib/conf.pm @ 0:be582bcd6585 draft
Master branch Updating - - Fxx
author | fgiacomoni |
---|---|
date | Thu, 04 Oct 2018 10:37:14 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/conf.pm Thu Oct 04 10:37:14 2018 -0400 @@ -0,0 +1,259 @@ +package lib::conf ; + +use strict; +use warnings ; +use Exporter ; +use Carp ; +use Data::Dumper ; + +use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); + +our $VERSION = "1.0" ; +our @ISA = qw(Exporter) ; +our @EXPORT = qw( as_conf get_value_from_conf check_path_and_file ) ; +our %EXPORT_TAGS = ( ALL => [qw( as_conf get_value_from_conf )] ) ; + +=head1 NAME + +conf - A module for manage pfem conf file + +=head1 SYNOPSIS + + use conf ; + my $object = conf->new() ; + +=head1 DESCRIPTION + +This module does manage conf file (extract all or selected fields) + +=head1 METHODS + +Methods are : + +=head2 METHOD new + + ## Description : new + ## Input : $self + ## Ouput : bless $self ; + ## Usage : new() ; + +=cut +## START of SUB +sub new { + ## Variables + my $self={}; + bless($self) ; + return $self ; +} +### END of SUB + +=head2 METHOD as_conf + + ## Description : permet de creer l'object conf a partir d'un fichier de conf de type KEY=VALUE + ## Input : $file + ## Ouput : $oConf (a hash) + ## Usage : my ( $oConf ) = as_conf( $file ) ; + +=cut +## START of SUB +sub as_conf { + ## Retrieve Values + my $self = shift ; + my ( $file, $separator ) = @_ ; + +# if (!defined $separator) { $separator = ';' } ## set separator to ; + + if ( !defined $file ) { croak "Can't create object with an none defined file\n" ; } + + my %Conf = () ; ## Hash devant contenir l'ensemble des parametres locaux + + if (-e $file) { + open (CFG, "<$file") or die "Can't open $file\n" ; + while (<CFG>) { + chomp $_ ; + if ( $_ =~ /^#(.*)/) { next ; } + elsif ($_ =~/^(\w+?)=(.*)/) { ## ALPHANUMERIC OR UNDERSCORE ONLY FOR THE KEY AND ANYTHING ELSE FOR VALUE + + my ($key, $value) = ($1, $2) ; + + if (defined $separator) { + if ( $value=~/$separator/ ) { ## is a list to split + my @tmp = split(/$separator/ , $value) ; + $Conf{$key} = \@tmp ; + } + } + else { + $Conf{$key} = $value ; + } + } + } + close(CFG) ; + } + else { + croak "Can't create object with an none existing file\n" ; + } + + return ( \%Conf ) ; +} +## END of SUB + +=head2 METHOD as_conf_list + + ## Description : permet de charger une liste txt en array + ## Input : $file + ## Output : elements + ## Usage : my ( elements ) = as_conf_list( $conf_file ) ; + +=cut +## START of SUB +sub as_conf_list { + ## Retrieve Values + my $self = shift ; + my ( $file ) = @_ ; + + my @elements = () ; + if ( !defined $file ) { croak "Can't create object with an none defined file\n" ; } + + if (-e $file) { + open (CFG, "<$file") or die "Can't open $file\n" ; + while (<CFG>) { + chomp $_ ; + if ( $_ =~ /^#(.*)/) { next ; } + elsif ($_ =~/^(.*)/) { if (defined $1) { push (@elements, $1) ; } } + } + } + else { + croak "Can't create object with an none existing file\n" ; + } + return(\@elements) ; +} +## END of SUB + +=head2 METHOD get_value_from_conf + + ## Description : permet de retourner une valeur du hash de conf a partir d'une key + ## Input : $oConf, $Key + ## Ouput : $Value + ## Usage : my ( $Value ) = get_value_from_conf( $oConf, $Key ) ; + +=cut +## START of SUB +sub get_value_from_conf { + ## Retrieve Values + my $self = shift ; + my ( $oConf, $Key ) = @_ ; + + my $Value = undef ; + + if ( defined $oConf ) { + if ( defined $oConf->{$Key} ) { + $Value = $oConf->{$Key} ; + } + } + else { + croak "Can't manage value with undefined object\n" ; + } + return($Value) ; +} +## END of SUB + +=head2 METHOD get_value_from_conf + + ## Description : permet de retourner une valeur du hash de conf a partir d'une key + ## Input : $oConf, $Key + ## Ouput : $Value + ## Usage : my ( $Value ) = get_value_from_conf( $oConf, $Key ) ; + +=cut +## START of SUB +sub split_value_from_conf { + ## Retrieve Values + my $self = shift ; + my ( $oConf, $Key, $sep ) = @_ ; + + my $value = undef ; + my @values = () ; + + if ( defined $oConf ) { + if ( defined $oConf->{$Key} ) { + $value = $oConf->{$Key} ; + @values = split ( /$sep/, $value) ; + } + } + else { + croak "Can't manage value with undefined object\n" ; + } + return(\@values) ; +} +## END of SUB + + +=head2 METHOD check_path_and_file + + ## Description : permet de verifier les path et la presence des exe decrits dans le file conf. Bloque le script en cas de probleme + ## Input : $oConfs + ## Ouput : NA + ## Usage : &get_value_from_conf( $oConf ) ; + +=cut +## START of SUB +sub check_path_and_file { + + my $self = shift ; + my ( $oConfs ) = @_ ; + + foreach my $conf ( keys %{ $oConfs } ) { + if ( $conf =~ /^FILE/ ) { + if ( -e $oConfs->{$conf} ) { + if ( -s $oConfs->{$conf} ) { next ; } + else { carp "[Warning] : The size of file $oConfs->{$conf} is null\n" ; } + } + else { + carp "[Warning] : The file $oConfs->{$conf} doesn't exist\n" ; + } + } + elsif ( $conf =~ /^PATH/ ) { + if ( -d $oConfs->{$conf} ) { next ; } + else { carp "[Warning] : The dir $oConfs->{$conf} doesn't exist\n" ; } + } + else { next ; } + } + return ; +} +## END of SUB + +1 ; + + +__END__ + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc conf.pm + + +=head1 Exports + +=over 4 + +=item :ALL is as_conf get_value_from_conf + +=back + +=head1 AUTHOR + +Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt> + +=head1 LICENSE + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=head1 VERSION + +version 1 : 10 / 02 / 2013 + +version 2 : 15 / 12 / 2015 + +=cut \ No newline at end of file