```{index} single: Sub::Identify ``` # Sub::Identify ```{pperl-module-badges} Sub::Identify ``` Ask a code reference for its name, its package and where it was defined. ## Synopsis ```perl use Sub::Identify qw(sub_name stash_name sub_fullname get_code_info get_code_location is_sub_constant); sub Foo::bar { 1 } my $code = \&Foo::bar; print sub_name($code), "\n"; # bar print stash_name($code), "\n"; # Foo print sub_fullname($code), "\n"; # Foo::bar my ($file, $line) = get_code_location($code); print is_sub_constant(sub () { 42 }) ? "constant\n" : "not\n"; ``` ## Functions `get_code_info($code)` returns the package and the name of the glob the sub was defined under - `('main', '__ANON__')` for an anonymous sub - or nothing for a sub still being compiled. `sub_name`, `stash_name` and `sub_fullname` are its parts. `get_code_location` returns the file and line of the sub's first statement, or nothing for an XSUB or a sub with no body. `is_sub_constant` is true for a sub perl inlines as a constant (`sub () { 42 }`, `use constant`). A non-reference gives nothing (0 for `is_sub_constant`). Nothing is exported by default; `:all` exports everything. This is a native implementation of Sub::Identify 0.14's `Identify.xs`; its `Sub/Identify.pm` is used unchanged. ## Differences from upstream None. ## Functions ### Code introspection #### [`get_code_info`](Identify/get_code_info) The package and the name a sub was defined under. #### [`get_code_location`](Identify/get_code_location) The file and line where a sub's body begins. #### [`is_sub_constant`](Identify/is_sub_constant) Whether a sub is a constant perl inlines. ```{toctree} :hidden: :maxdepth: 1 Identify/get_code_info Identify/get_code_location Identify/is_sub_constant ```