```{index} single: Sub::Util ``` # Sub::Util ```{pperl-module-badges} Sub::Util ``` Names and prototypes of code references: read the name a sub was defined under, give an anonymous sub a name that stack traces, `caller` and profilers show, and set a sub's prototype at run time. This is Sub::Util from Scalar-List-Utils 1.70; `Sub/Util.pm` is upstream's, and its three functions are the XS ones of ListUtil.xs. ## Synopsis ```perl use Sub::Util qw(subname set_subname set_prototype); my $anon = sub { (caller(0))[3] }; print subname($anon), "\n"; # main::__ANON__ my $named = set_subname('My::helper', $anon); print subname($named), "\n"; # My::helper print $named->(), "\n"; # caller() sees it: My::helper set_prototype('$$', $named); print prototype($named), "\n"; # $$ ``` ## Differences from upstream None: upstream's own tests of the three functions pass unchanged (t/81-xs-native/List-Util/490-upstream-subname.t, 380-upstream-prototype.t). ## Functions ### Names #### [`subname`](Util/subname) Return the fully qualified name of a subroutine reference. #### [`set_subname`](Util/set_subname) Assign a name to a subroutine reference in place. ### Prototypes #### [`set_prototype`](Util/set_prototype) Set or clear the prototype on a subroutine reference. ```{toctree} :hidden: :maxdepth: 1 Util/subname Util/set_subname Util/set_prototype ```