要获取当前上下文,我在perlapi
中找到了caller_cx
功能。但是没有关于结构的描述。在perl源代码perl.h
中,我只能找到此typedef
:
typedef struct context PERL_CONTEXT;
是否有示例如何使用caller_cx
返回的此结构来查找XS的当前软件包?
@dada在注释中提到的context
结构是定义的cop.h
:
struct context {
union {
struct block cx_blk;
struct subst cx_subst;
} cx_u;
};
也在cop.h
中定义了block
结构。
通过检查pp_ctl.c
中PERL caller
功能的C实现(第1850行),我认为您可以使用以下代码获取软件包名称:
const PERL_CONTEXT *cx = caller_cx(0, NULL);
char *pack_name = HvNAME((HV*)CopSTASH(cx->blk_oldcop));