Sub::Identify - Retrieve names of code references
use Sub::Identify ':all'; my $subname = sub_name( $some_coderef ); my $packagename = stash_name( $some_coderef ); # or, to get all at once... my $fully_qualified_name = sub_fullname( $some_coderef ); defined $subname and say "this coderef points to sub $subname in package $packagename"; my ($file, $line) = get_code_location( $some_coderef ); $file and say "this coderef is defined at line $line in file $file"; is_sub_constant( $some_coderef ) and say "this coderef points to a constant subroutine";
Sub::Identify allows you to retrieve the real name of code references.
Sub::Identify
It provides six functions, all of them taking a code reference.
sub_name returns the name of the code reference passed as an argument (or __ANON__ if it's an anonymous code reference), stash_name returns its package, and sub_fullname returns the concatenation of the two.
sub_name
__ANON__
stash_name
sub_fullname
get_code_info returns a list of two elements, the package and the subroutine name (in case of you want both and are worried by the speed.)
get_code_info
In case of subroutine aliasing, those functions always return the original name.
get_code_location returns a two-element list containing the file name and the line number where the subroutine has been defined.
get_code_location
is_sub_constant returns a boolean value indicating whether the subroutine is a constant or not.
is_sub_constant
By default Sub::Identify tries to load an XS implementation of the get_code_info, get_code_location and (on perl versions 5.16.0 and later) is_sub_constant functions, for speed; if that fails, or if the environment variable PERL_SUB_IDENTIFY_PP is defined to a true value, it will fall back to a pure perl implementation, that uses perl's introspection mechanism, provided by the B module.
PERL_SUB_IDENTIFY_PP
B
Sub::Util, part of the module distribution Scalar::List::Utils since version 1.40. Since this will be a core module starting with perl 5.22.0, it is encouraged to migrate to Sub::Util when possible.
Sub::Name
A git repository for the sources is at https://github.com/rgs/Sub-Identify.
(c) Rafael Garcia-Suarez (rgs at consttype dot org) 2005, 2008, 2012, 2014, 2015
This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.
To install Sub::Identify, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Sub::Identify
CPAN shell
perl -MCPAN -e shell install Sub::Identify
For more information on module installation, please visit the detailed CPAN module installation guide.