Hi Linuxer,
erstmal vielen Dank für deinen letzten Beitrag und sorry, dass die
Antwort so lange gedauert hat :)
Zu meiner Problematik :
Dein Vorschlag, die Split( ) Funktion zu nutzen, funktioniert zwar
im Prinzip, es ist mir allerdings zu unsicher, da nicht sicher gestellt
werden kann, dass immer die ersten 3 Module Standard sind.
Ich verwende es für meine Log - Verarbeitung und möchte gerne
festlegen, ob ein Modul eine Extensions ist. Des weiteren brauche
ich den Namen des Moduls, da ich in diesem Fall den Namen des Moduls
anhänge :
my $LG_Package = "IMCR";
if( $LG_FH_Mode eq "Standard" )
{
$LG_FH_Signifier = $LG_Signifier_Standard . "_" . "Standard";
$LG_FH_Directory = $LG_Directories_Standard;
}
if( $LG_FH_Mode eq "SE" )
{
$LG_FH_Signifier = $LG_Signifier_Standard . "_" . $LG_Package;
$LG_FH_Directory = $LG_Directories_Extensions;
}
Wie du siehst, ist hier das Paket 'LG_Package' noch fest definiert, doch
hier brauche ich den Namen des Moduls, damit er die Datei richtig schreibt.
Zur meiner Lösung :
Ich lade ja als den Kernel des Objekt - Managers, der dann überall zur Verfügung steht :
local $Kernel::OM = Kernel::OM -> New( Debug_Mode => $Parameter{ Debug_Mode } );
Ich lade das Modul über die jeweilige new( ) Methode des Moduls. Hier z. B. die
Sub - Routine aus "Kernel::Extensions::IMCR' :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sub new {
# Initialisierung des Konstruktors
my ( $Class , %Parameter ) = @_;
my $Self = { };
bless( $Self , $Class );
# ------------------------------------------------------------------------------------------
$Kernel::OM -> { SE } -> { 'Kernel::Extensions::IMCR' } -> { Name } = "IMCR";
$Self -> { Testumgebung } = 'ERFOLG';
my $LH = $Kernel::OM -> Load( 'Kernel::Logs' );
$LH -> Log( Prio => 'Error' ,
Code => 'T1000' ,
MSG => 'Testumgebung' );
return $Self;
}
Ich wollte erst einen Flag wie "Self -> { SE }" setzen und im Object - Loader abfragen, aber
dann funktioniert die hier abgebildete Log - Verarbeitung in der new Methode nicht ( da er
noch nicht weiß, dass es eine Extension ist ).
Also habe ich das Package direkt im Objekt - Manager abgelegt, was den Vorteil hat, dass ich
sowohl prüfen kann, ob es eine Extension ist und ich habe gleichzeitig den Namen für den
Dateinamen der Logs.
$Kernel::OM -> { SE } -> { 'Kernel::Extensions::IMCR' } -> { Name } = "IMCR";
Ich weiß nicht ob dies die beste Lösung ist, aber dein Vorschlag funktioniert leider aus dem Grund nicht
dass es immer verschiedene Module mit einer verschiedenen Anzahl von "::" ist. Hier den Namen zu
identifizieren, finde ich fast unmöglich.
Ich hoffe, du kannst mir eine Ratschlag geben, ob dies so verwendbar ist, oder vielleicht hast du ja
eine bessere Idee :)
Vielen Dank im Voraus !
VG
YAPD
Last edited: 2021-05-23 14:27:04 +0200 (CEST)
Yet Another Perl Developer