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

Reini Urban reini.urban at gmail.com
So Feb 11 02:44:25 PST 2018



> On Feb 11, 2018, at 11:34 AM, Daniel Leidert <daniel.leidert.spam at gmx.net> wrote:
> 
> 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);
> }

einfach den caller index um eins erhöhen.

sub debug_dump {
  my @msg = @_;
  say “DEBUG2”, (caller[1])]3], “:”, (caller[1])]2], “ “, @msg;
}

ungetestet.

> 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
> _______________________________________________
> Dresden-pm mailing list
> Dresden-pm at pm.org
> http://mail.pm.org/mailman/listinfo/dresden-pm


Mehr Informationen über die Mailingliste Dresden-pm