如何从perl xs找到当前的软件包名称

  • 本文关键字:软件包 perl xs perl perlapi
  • 更新时间 :
  • 英文 :


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

最新更新