9

为了获取当前上下文,我caller_cxperlapi. 但是没有关于结构的描述。在 perl 源代码perl.h中,我只能找到这个typedef

typedef struct context PERL_CONTEXT;

是否有示例如何使用返回的结构caller_cx从 XS 中查找当前包?

4

1 回答 1

6

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));
于 2017-03-01T14:29:44.457 回答