如何从 perl XS 中查找当前包名称?
How to find current package name from perl XS?
为了获取当前上下文,我在 perlapi
中找到了 caller_cx
函数。但是没有结构的描述。在 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
中定义。
通过检查 pp_ctl.c
中 Perl caller
函数的 C 实现(第 1850 行),我认为您可以使用以下代码获取包名:
const PERL_CONTEXT *cx = caller_cx(0, NULL);
char *pack_name = HvNAME((HV*)CopSTASH(cx->blk_oldcop));
为了获取当前上下文,我在 perlapi
中找到了 caller_cx
函数。但是没有结构的描述。在 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
中定义。
通过检查 pp_ctl.c
中 Perl caller
函数的 C 实现(第 1850 行),我认为您可以使用以下代码获取包名:
const PERL_CONTEXT *cx = caller_cx(0, NULL);
char *pack_name = HvNAME((HV*)CopSTASH(cx->blk_oldcop));