song has asked for the wisdom of the Perl Monks concerning the following question:

hi all, I am doing some configuration to deploy Lemonldap::NG,but there is some question confused me.

## @file # Main portal for Lemonldap::NG portal ## @class # Main portal for Lemonldap::NG portal package Lemonldap::NG::Portal::SharedConf; use strict; use Lemonldap::NG::Portal::Simple qw(:all); use Lemonldap::NG::Common::Conf; #link protected lmConf Con +figuration use Lemonldap::NG::Common::Conf::Constants; #inherits use Regexp::Assemble; use URI::Split qw(uri_split); *EXPORT_OK = *Lemonldap::NG::Portal::Simple::EXPORT_OK; *EXPORT_TAGS = *Lemonldap::NG::Portal::Simple::EXPORT_TAGS; *EXPORT = *Lemonldap::NG::Portal::Simple::EXPORT; our $VERSION = '1.9.1'; use base qw(Lemonldap::NG::Portal::Simple); our $confCached; BEGIN { eval { require threads::shared; threads::shared::share($confCached); }; } ################## # OVERLOADED SUB # ################## ## @method protected boolean getConf(hashRef args) # Copy all parameters returned by the Lemonldap::NG::Common::Conf obje +ct in $self. # @param args hash # @return True sub getConf { my $self = shift; my %args; if ( ref( $_[0] ) ) { %args = %{ $_[0] }; } else { %args = @_; } if ( defined( $args{configStorage} ) ) { $self->{configStorage} = $args{configStorage}; } my $num; my $lConf; # If useLocalConf is set, just verify that current conf has the sa +me number # than local cache one if ( $confCached and $confCached->{useLocalConf} ) { $lConf = $self->__lmConf->getLocalConf(PORTALSECTION); eval { $num = $lConf->{cfgNum} }; } else { $num = $self->__lmConf->lastCfg(); } # Reload configuration unless ( $confCached and $confCached->{cfgNum} == $num ) { $lConf ||= $self->__lmConf->getLocalConf(PORTALSECTION); my $prm = { cfgNum => $num }; if ( $args{useLocalConf} or $lConf->{useLocalConf} ) { $prm->{local} = 1; $self->lmLog( 'useLocalConf set to true', 'debug' ); } my $gConf = $self->__lmConf->getConf($prm); unless ( ref($gConf) and ref($lConf) ) { $self->abort( "Cannot get configuration", $Lemonldap::NG::Common::Conf::msg ); } $self->lmLog( "Cached configuration too old, get configuration $num " . "($Lemonldap::NG::Common::Conf::msg)", 'debug' ); %$confCached = ( %$gConf, %$lConf ); my $re = Regexp::Assemble->new(); foreach my $vhost ( keys %{ $confCached->{locationRules} } ) { my $quotedVhost = quotemeta($vhost); $self->lmLog( "Vhost $vhost added in reVHosts", 'debug' ); $re->add($quotedVhost); # Add aliases if ( $confCached->{vhostOptions}->{$vhost}->{vhostAliases} + ) { foreach my $alias ( split /\s+/, $confCached->{vhostOptions}->{$vhost}->{vhostAlias +es} ) { $self->lmLog( "Alias $alias added in reVHosts", 'd +ebug' ); $re->add( quotemeta($alias) ); } } } # Add portal vhost my ( $portal_scheme, $portal_auth ) = uri_split( $confCached->{portal} ); $re->add($portal_auth); $self->lmLog( "Portal vhost $portal_auth added in reVHosts", ' +debug' ); $confCached->{reVHosts} = $re->as_string; } %$self = ( %$self, %$confCached, %args, ); $self->lmLog( "Now using configuration: " . $confCached->{cfgNum}, 'debug' ); 1; } sub __lmConf { my $self = shift; return $self->{lmConf} if ( $self->{lmConf} ); my $r = Lemonldap::NG::Common::Conf->new( $self->{configStorage} ) +; $self->abort( "Cannot create configuration object", $Lemonldap::NG::Common::Conf::msg ) unless ( ref($r) ); $self->{lmConf} = $r; }

its SYNOPSIS like below, but I can't find the new method in the code, is that inherits from the parent ? thanks a lot. here is the source code repo:https://forge.ow2.org/project/download.php?group_id=274&file_id=21538

use Lemonldap::NG::Portal::SharedConf; my $portal = new Lemonldap::NG::Portal::SharedConf( { configStorage => { type => 'DBI', dbiChain => "dbi:mysql:...", dbiUser => "lemonldap", dbiPassword => "password", dbiTable => "lmConfig", }, # Activate SOAP service Soap => 1 } );

Replies are listed 'Best First'.
Re: no New method in Lemonldap::NG::Portal::SharedConf module
by haukex (Archbishop) on Feb 04, 2017 at 13:06 UTC

    Hi song,

    I can't find the new method in the code, is that inherits from the parent ?

    I don't know this module, but I am looking at the source of Lemonldap::NG::Portal::SharedConf on CPAN, which appears to be where you got this piece of code from. (Note that posting smaller code snippets that show only the code relevant to the question helps because readers have less code to wade through, and it may help you narrow down the problem. If it's necessary to post longer pieces of code, it's good to use <readmore> tags.)

    Near the top of Lemonldap::NG::Portal::SharedConf, you'll find the line use base qw(Lemonldap::NG::Portal::Simple);. base establishes an @ISA relationship with Lemonldap::NG::Portal::Simple, meaning Lemonldap::NG::Portal::SharedConf is then a subclass of Lemonldap::NG::Portal::Simple. The latter does have a new method, so that's what gets called when you say Lemonldap::NG::Portal::SharedConf->new().

    Hope this helps,
    -- Hauke D

      hi Hauke, it really helps. thanks a lot, should be more careful next time