Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Callsite(3)	      User Contributed Perl Documentation	   Callsite(3)

       Devel::Callsite - Get caller return OP address and Perl interpreter

	 use Devel::Callsite;
	 my $site = sub	{ return callsite() };
	 my $op_addr = $site->();
	 printf	"OP location: 0x%x\n", $op_addr;   # prints caller OP location
	 printf	"OP location: 0x%x\n", $site->(); # prints a different OP location

	 sub foo { return callsite(1) };
	 sub bar { foo() };
	 # print this OP location even though it is 2 levels up	the call chain.
	 printf	"OP location: 0x%x\n", bar();

	 if ($]	>= 5.025) {
	   printf "OP is: %s\n", addr_to_op($addr);
	   my $get_op =	sub { return caller_nextop() };
	   printf "OP is now: %s\n", $get_op->();

	 print context(), "\n";	# prints the interpreter context, an unsigned number

       Running the above gives:

	 OP location: 0x5572e41f89f8
	 OP location: 0x5572e421f5b0
	 OP is:	B::NULL=SCALAR(0x5572e41d0578)
	 OP location: 0x5572e421f010
	 OP is now: B::LISTOP=SCALAR(0x5572e41d0578)

	   $callsite = callsite();
	   $callsite = callsite($level);

       This function returns the the OP	address	of the caller, a number. It
       can take	an optional integer specifying the number of levels back to
       get the OP address. If no parameter is given, a value of	0 is used
       which means to go up one	level in the call chain. This behavior is like
       the built-in function "caller".

       This value is useful for	functions that need to uniquely	know where
       they were called, such as "Every::every()"; see Every. Or it can	be
       used to pinpoint	a location with	finer granularity than a line number
       <>. In conjunction with an OP
       tree disassembly	you can	know exactly where the caller is located in
       the Perl	source.

       As of version 0.08, this	function will return the expected call site
       for functions called via	"DB::sub". (Previously it returned a call site
       inside the debugger.) If	"callsite" is called from package "DB" in list
       context,	it will	return two numbers. The	first is the ordinary return
       value; the second is the	'true' call site of the	function in question,
       which may be different if "DB::sub" is in use.

       For now this is only in 5.026 or	greater.

	   $op = caller_nextop();
	   $op = caller_nextop($level);

       For now this is only in 5.026 or	greater.

	   $op = caller_nextop();
	   $op = caller_nextop($level);

       This function returns the the "B::OP", not the address, of the next OP
       to get run after	the call is made. It is	equivalent to:


	   $context = context()

       This function returns the interpreter context as	a number. Using
       "callsite" alone	to identify the	call site is not reliable in programs
       which may include multiple Perl interpreters, such as when using
       ithreads. Combining "callsite" with "context" gives a unique location.

       Ben Morrow conceived this and posted it to perl5-porters. Ted Zlatanov
       then turned it into a CPAN module which he maintained for the first 3
       revisions. Ben also added the level parameter to	callsite.

       ikegami provided	the function to	turn the address into a	real "B::OP".

       It is currently maintained (or not) by Rocky Bernstein.

       B::Concise to disassemble the OP	tree. Devel::Trepan optionally uses
       Devel::Callsite to show you exactly where you are stopped inside	the

       Rocky Bernstein <>	(current maintainer) Ted Zlatanov
       <> Ben Morrow ikegami

       Copyright (C) 2013, 2018	Rocky Bernstein	<>, Ted
       Zlatanov, <>, Ben Morrow

       This program is distributed WITHOUT ANY WARRANTY, including but not
       limited to the implied warranties of merchantability or fitness for a
       particular purpose.

       The program is free software. You may distribute	it and/or modify it
       under the terms of the GNU General Public License as published by the
       Free Software Foundation	(either	version	2 or any later version)	and
       the Perl	Artistic License as published by OaReilly Media, Inc. Please
       open the	files named gpl-2.0.txt	and Artistic for a copy	of these

perl v5.32.0			  2018-07-17			   Callsite(3)


Want to link to this manual page? Use this URL:

home | help