Wir bauen unsere große Perl-Anwendung langsam auf objektorientierte Schnittstellen um, insbesondere für Datenmodelle. Der nervige Teil ist, dass Stack-Traces weniger nützlich sind. Um ein konstruiertes Beispiel zu geben: Vorher.
%Vor%Nachher.
%Vor% Nun kann ich nicht sehen, welcher Benutzer an foo()
übergeben wurde, ich sehe nur den Klassennamen (der bereits dokumentiert ist) und eine Speicheradresse eines Objekts.
Ich habe versucht, einen Stringification-Operator für die Modellklasse mit overload.pm zu installieren:
%Vor%Aber das hat keinen Einfluss auf die Longmess. Was ich möchte, ist etwas in der Art:
%Vor% Das heißt, der erste Parameter für foo()
sollte mit der Methode stringify()
des Objekts angezeigt werden. Wie kann ich das erreichen?
Das Problem ist in diesem Teil von Carp.pm
:
Das heißt, wenn ein Argument ein überladenes Objekt sein könnte, dann wird jede Überladung der Zeichenketten mit dem StrVal
Helfer
Leider gibt es dafür keinen direkten Weg. Alles, was wir tun können, ist affe-patchen die Carp::format_arg
sub, z. B.
Wie es ist, ist dies unelegant und sollte in ein Pragma gebracht werden:
Datei Carp/string_overloading.pm
:
Dann der Code
%Vor%Ausgänge:
%Vor%Tags und Links perl debugging stack-trace