Как узнать текущее имя пакета из Perl XS?
Чтобы получить текущий контекст, я нахожу caller_cx
функция в perlapi
, Но нет описания для структуры. В исходном коде Perl perl.h
Я могу найти только это typedef
:
typedef struct context PERL_CONTEXT;
Есть ли примеры, как использовать эту структуру, возвращаемую caller_cx
найти текущий пакет из XS?
1 ответ
Решение
context
структура определена cop.h
как упомянуто @Dada в комментариях:
struct context {
union {
struct block cx_blk;
struct subst cx_subst;
} cx_u;
};
так же block
структуры определены в cop.h
,
Проверяя реализацию C Perl caller
функция в pp_ctl.c
(строка 1850), я думаю, вы можете получить имя пакета, используя следующий код:
const PERL_CONTEXT *cx = caller_cx(0, NULL);
char *pack_name = HvNAME((HV*)CopSTASH(cx->blk_oldcop));