Как узнать текущее имя пакета из 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));
Другие вопросы по тегам