GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Callsite(3) User Contributed Perl Documentation Callsite(3)

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

  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)
  93951941730912

    $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 <http://www.perlmonks.com/?node_id=987268>. 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:

    addr_to_op(callsite($level));

    $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 debugger.

Rocky Bernstein <rocky@cpan.org> (current maintainer) Ted Zlatanov <tzz@lifelogs.com> Ben Morrow ikegami

Copyright (C) 2013, 2018 Rocky Bernstein <rocky@cpan.org>, Ted Zlatanov, <tzz@lifelogs.com>, 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 O’Reilly Media, Inc. Please open the files named gpl-2.0.txt and Artistic for a copy of these licenses.

2018-07-17 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.