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