Ich muss die Warndokumentation falsch verstanden haben. So wie ich es gelesen habe, diesen Code:
%Vor%Sollte die 'blarg' Warnung ausgeben und sterben, da ich nach allen Warnungen gefragt habe, die tödlich sein könnten. Wenn ich den Code ausführe, bekomme ich:
%Vor%Kann mir jemand helfen zu verstehen, warum ich nicht vor dem Tod gewarnt werden kann?
Okay. Das ist hässlich. Ich hatte einen halbfertigen Beitrag, in dem ich dies als Fehler in warnings
erklärte, und dann wurde mir klar, dass das nicht so ist, es ist nur ein wirklich Böses in der Art, wie warnings
funktioniert.
Warnungen suchen nach einem relevanten Stapelrahmen, um die Warnbits von% c_de% 's Aufrufenden aufzurufen. Die Idee ist, dass Sie ein Modul schreiben und Sie in Ihren Funktionen warnings::warn
oder warnings::warn
verwenden und ob die Warnung gedruckt (oder fatal) ist, hängt von der Einstellung warnings::warnif
im Bereich in ab Code, der das Modul verwendet . Es gibt keine Option dafür, dass es bei use warnings
statt bei caller(1)
beginnt, daher ist der gewünschte Effekt nicht möglich.
Ein Beispiel für Code, der funktioniert (und demonstriert, wie diese Schnittstelle von jedem, der sie geschrieben hat, verwendet werden sollte):
%Vor% Und Sie können die Funktionsweise nicht dadurch untergraben, dass Sie nur eine weitere Ebene von Unterprogrammen hinzufügen, weil es die Flags des ersten Aufrufers eines anderen Pakets vom Aufrufer von caller(2)
/ übernimmt. warn
/ warnif
/ etc.