[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