[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