1 2#include "EXTERN.h" 3#include "perl.h" 4#include "XSUB.h" 5#include "ppport.h" 6 7/* 8get_code_info: 9 Pass in a coderef, returns: 10 [ $pkg_name, $coderef_name ] ie: 11 [ 'Foo::Bar', 'new' ] 12*/ 13 14MODULE = Sub::Identify PACKAGE = Sub::Identify 15 16PROTOTYPES: ENABLE 17 18void 19get_code_info(coderef) 20 SV* coderef 21 PREINIT: 22 char* name; 23 char* pkg; 24 PPCODE: 25 if (SvOK(coderef) && SvROK(coderef) && SvTYPE(SvRV(coderef)) == SVt_PVCV) { 26 coderef = SvRV(coderef); 27 if (CvGV(coderef)) { 28 name = GvNAME( CvGV(coderef) ); 29 pkg = HvNAME( GvSTASH(CvGV(coderef)) ); 30 EXTEND(SP, 2); 31 PUSHs(sv_2mortal(newSVpvn(pkg, strlen(pkg)))); 32 PUSHs(sv_2mortal(newSVpvn(name, strlen(name)))); 33 } 34 else { 35 /* sub is being compiled: bail out and return nothing. */ 36 } 37 } 38