[Dresden-pm] Funktion deklarieren, die automatisch __LINE__/__SUB__ der aufrufenden Funktion ausgibt

Daniel Leidert daniel.leidert.spam at gmx.net
So Feb 11 02:34:52 PST 2018


Hallo,

Ich benötige Hilfe. Für ein Programm habe ich zwei Funktionen debug()
und debug_dump(), die bestimmte Inhalte ausgeben. Nun möchte ich gerne,
dass die Ausgabe folgendermaßen aussieht:

debug()
->
DEBUG (function-name): ...

debug_dump()
->
DEBUG2 (function-name:line-number): ...

Es ist einfach, den Funktionen entsprechende Argumente zuzuordnen:

sub function {
	[..]
	debug_dump ((caller(0))[3], __LINE__, ...)
	[..]
}

sub debug_dump {
	my ($sub, $line, @msg) = @_;
	say ("DEBUG2 (", $sub, ":", $line, ") ", @msg);
}

Nur muss ich das dann bei jedem Aufruf von debug_dump() die beiden
ersten Argumente immer wieder tippen, obwohl es quasi immer die selben
Argumente sind (nur eben andere Ausgaben produzieren). Kann ich mir die
Tipparbeit irgendwie sparen? In etwa so (nur zum verdeutlichen):

#define debug2(@msg) debug_dump(__SUB__, __LINE__, @msg)

So dass ich nur noch debug2("text", $x, ...) schreiben muss? Oder
bekomme ich die Informationen vielleicht anderweitig innerhalb von
debug_dump()? Quasi: welche Routine hat debug_dump() aufgerufen? In
welcher Zeile geschah der Aufruf? Kann __SUB__ das?

Ich bin gerade völlig ratlos und über jeden Tip dankbar.

PS: Bekomme ich über __SUB__ irgendwie den Funktionsnamen heraus,
ähnlich zu (caller(0))[3]?

Grüße, Daniel


Mehr Informationen über die Mailingliste Dresden-pm