[Cologne-pm] Funktionsnamen innerhalb einer Funktion feststellen
Michael Lamertz
mike at lamertz.net
Fri Jan 26 00:57:01 PST 2007
Hey,
On Fri, Jan 26, 2007 at 09:14:52AM +0100, Wolfgang Warner wrote:
> Hallo,
>
> kann man innerhalb einer Funktion feststellen, wie die Funktion heißt,
> ähnlich wie bei den Pseudo Variablen __PACKAGE__ oder __LINE__.
eine fertige Constant dafür gibt's meines Wissens nach nicht. Die Info
die Du suchst findest Du aber beim Aufruf von 'caller(0)';
---------- snip ----------
#!/usr/bin/perl
use strict;
use warnings;
sub trace {
my @c = caller(1);
print STDERR "$c[1]: $c[2] -> $c[3]: @_";
}
sub a {
trace "Enter\n";
print "Hello, world\n";
trace "Leave\n"
}
sub b {
trace "Enter\n";
a(42);
trace "Leave\n";
}
b(42);
---------- snip ----------
===>
---------- snip ----------
tweety:/tmp$ perl x.pl
x.pl: 23 -> main::b: Enter
x.pl: 19 -> main::a: Enter
Hello, world
x.pl: 19 -> main::a: Leave
x.pl: 23 -> main::b: Leave
tweety:/tmp$
---------- snip ----------
Du musst aufpassen, wenn Du die Log-Aufrufe direkt aus Deiner Funktion
machst, statt ueber eine Wrapper-Funktion. Das Argument an 'caller' ist
die Tiefe des Callstacks die Du betrachtest. Bei einer direkten
Benutzung von 'caller' liegt diese natuerlich bei 0 statt 1.
--
Well, then let's give that Java-Wussie a beating... (me)
Michael Lamertz | +49 2234 204947 / +49 171 6900 310
Sandstr. 122 | mike at lamertz.net
50226 Frechen | http://www.lamertz.net
Germany | http://www.perl-ronin.de
More information about the Cologne-pm
mailing list