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