Thread Aufruf von Sub - Klassen mit variablen Namen (5 answers)
Opened by YAPD at 2021-05-11 16:02

YAPD
 2021-05-11 21:31
#193263 #193263
User since
2015-09-20
146 Artikel
BenutzerIn

user image
Hi hlubenow,

wie versprochen, möchte ich dir nun die Ergebnisse
meiner "Umbauarbeiten" präsentieren :-).

1. Ich habe einen Object - Manager ( hier kurz OM genannt ), der per new( )
Befehl die gewünschten Parameter liefert.

2. Ich rufe in meinem Hauptscript den Object - Manager mit dem Befehl "my $OM = Kernel::OM -> new( );" auf :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   
sub new {

my ( $Type , %Param ) = @_;

my $Self = bless { } , $Type;

for my $Parameter ( sort keys %Param )
{
$Self -> { Parameter } -> { $Parameter } = $Param{ $Parameter };
}

return $Self;
}


3. Ich lade die Config über die Load( ) Funktion des Object - Managers :

Code: (dl )
1
2
   my $Config = $OM -> Load( 'Kernel::Config' );


Sub - Routine "Load( )" :

Code: (dl )
1
2
3
4
5
   sub Load( )
{
return $_[ 0 ] -> Builder( Package => $_[ 1 ] );
}


4. Erstellung des Objektes über Funktion "Builder( )"

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    sub Builder {

my ( $Self , %Parameter ) = @_;

my $OM_Package = $Parameter{ Package };
my $OM_FH = $OM_Package;

$OM_FH =~ s{::}{/}g;
$OM_FH .= '.pm';

eval { require $OM_FH; };

my $OM_Objects = $OM_Package -> New( %{ $Self -> { Parameter } -> { $OM_Package } // { } } );
$Self -> { Objects } -> { $OM_Package } = $OM_Objects;

return $OM_Objects;

}


5. Ausgabe der Werte im Hauptscript :

Code: (dl )
1
2
3
4
5
6
7
   my $Config = $OM -> Load( 'Kernel::Config' );

...

print "Eintrag aus Config : " . $Config -> { Home } . "\n";
print "Eintrag aus Defaults : " . $Config -> { Defaults } . "\n";


Das war eim Prinzip schon alles. Die Anwendung funktioniert meines Erachtens
so perfekt, solltest du allerdings Änderungs- oder Verbesserungsvorschläge
haben, bin ich dafür natürlich offen.

Beste Grüße
YAPD
Last edited: 2021-05-11 21:34:53 +0200 (CEST)
Yet Another Perl Developer

View full thread Aufruf von Sub - Klassen mit variablen Namen