Thread Regex - Exakten String ersetzen (6 answers)
Opened by YAPD at 2021-04-18 18:02

YAPD
 2021-05-23 14:23
#193277 #193277
User since
2015-09-20
146 Artikel
BenutzerIn

user image
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 :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
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 :

Code: (dl )
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' :

Code: (dl )
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.

Code: (dl )
$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

View full thread Regex - Exakten String ersetzen