The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Sub::WrapPackages::CallTree

DESCRIPTION

Tool that uses Sub::WrapPackages to show on STDERR a tree of function calls as your code runs, including arguments and a list of return values

SYNOPSIS

In your code - in a test file, perhaps:

    use Sub::WrapPackages::CallTree qw(My::App::* And::Another::Namespace)

Or in your environment:

    PERL5OPT=-MSub::WrapPackages::CallTree=My::App::*,And::Another::Namespace

The results will look something like this:

    Called Sub::WrapPackages::Tests::Victim::foo with: [Sub::WrapPackages::Tests::Victim]
      Called Sub::WrapPackages::Tests::Victim::bar with: [1]
        Called Sub::WrapPackages::Tests::Victim::baz with: [OMG, ROBOTS, 5]
        Return from Sub::WrapPackages::Tests::Victim::baz with: [OMG, ROBOTS, 5]
      Return from Sub::WrapPackages::Tests::Victim::bar with: [OMG, ROBOTS, 5]
    Return from Sub::WrapPackages::Tests::Victim::foo with: [2, OMG, ROBOTS, 5]

NB that all arguments and return values are stringified for display, as there is no way of nicely displaying a tree of function calls as well as complex data structures, and the tree of function calls is more important.

PARAMETERS

The arguments are the same as those you would pass as the packages option to Sub::WrapPackages. The other options have sensible defaults and can not (currently) be set. If you would like to be able to over-ride the defaults please submit a pull request with tests.

BUGS and IMPROVEMENTS

Please report bugs and submit improvements via Github.

THANKS TO

Thanks to Will Shepherd, who berated me for cut n pasting the code that implements this all over the place while debugging, and prompting me to wrap it up into a much smaller piece of code that I can splatter all over the place while debugging.

COPYRIGHT and LICENCE

Copyright 2022 David Cantrell <david@cantrell.org.uk>

This software is free-as-in-speech software, and may be used, distributed, and modified under the terms of either the GNU General Public Licence version 2 or the Artistic Licence. It's up to you which one you use. The full text of the licences can be found in the files GPL2.txt and ARTISTIC.txt, respectively.

CONSPIRACY

This code is also free-as-in-mason.