为了获取当前上下文,我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));