Thread Wie Log-Verarbeitung ohne Abbruch bewerkstelligen
(12 answers)
Opened by YAPD at 2019-05-31 19:09
Hi YAPD,
2019-06-02T17:02:08 YAPDNa ja, das sieht stellenweise so aus wie "Ärmel hochgekrempelt und drauflosprogrammiert". Immer ein bißchen abseits des Üblichen, was Groß/Kleinschreibung, Leerzeichen und -Zeilen angeht. Das ist persönlicher Stil, nicht unmoralisch, aber bei Code, der länger lebt, zahlt man irgendwann den Preis dafür. Ich bringe mal ein paar Beispiele aus Deinem Code: 2019-06-02T17:02:08 YAPDEine Baumarkt-Reklame sagt dazu: "Respekt, wer's selber macht". Der Objektmanager macht nicht viel. Wenn man vermeiden will, für Dutzende von Klassen beinuhe identische new-Methoden zu schreiben, dann wäre das zeitgemäße Verfahren so etwas wie Moose oder Moo. Ein paar Zeilen aus dessen Code fallen sofort ins Auge: 2019-06-02T17:02:08 YAPDDas würde ich ja so schreiben: Code (perl): (dl
)
$Self -> { Parameter } = { %Parameter } 2019-06-02T17:02:08 YAPDDas gab's mal als Tipp. In den Achzigern des vorigen Jahrhunderts. Seither sind die Computer ein bisschen flotter geworden und es hat sich die Einsicht durchgesetzt, dass man mehr an Lesbarkeit verliert als an Performance gewinnt. Ich bezweifle, dass Du den Performancegewinn mit einem Benchmark Deines Programms nachweisen kannst. 2019-06-02T17:02:08 YAPD Was mir da aufgefallen ist: _ObjectBuild gibt gar nichts (genauer: einen Leerstring, wenn das Laden des Moduls erfolgreich war) zurück, und das wird dann von Get weitergereicht. Get liefert also nicht zurück, was da geladen wurde. Ich habe die von Dir gesuchte Fehlermeldung erzeugt, indem ich die Methode _ObjectBuild wie folgt verändert habe: Code (perl): (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 25 26 sub _ObjectBuild { my ( $Self, %Parameter ) = @_; my $Package = $Parameter{ Package }; my $Datei_Bezeichnung = $Package; $Datei_Bezeichnung =~ s{::}{/}g; $Datei_Bezeichnung .= '.pm'; eval { require $Datei_Bezeichnung; }; if ( $@ ) { if ( $CurrentObject && $CurrentObject ne $Package ) { $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject" ); } else { $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Moduls $Package" ); } } else { return $Package->new; } } Das ergibt beim Ablauf: Fehler bei der Initialisierung des Unter - Moduls Kernel::Modules::FalschesModul im Modul Kernel::Modules::test Voilà! |