perl - 有没有办法从 XS 访问 perl 中的特殊标记?

标签 perl xs perlapi

在 perl 中的特殊标记,如 __PACKAGE__ , __SUB__ , __FILE__ , __LINE__存在并可从脚本中获得。

我可能会得到 __PACKAGE__ 的值来自 XSHvNAME( PL_currstash ) , 我想。
但是如何访问其他人?

是否有特殊的接口(interface)可以从 XS 访问所有这些? ?喜欢:CTX->package , CTX->sub等等

最佳答案

您可以在 toke.c 中一一查找对于编译时值:

  • __PACKAGE__ => HvNAME(PL_curstash)PL_curstname
  • __FILE__ => CopFILE(PL_curcop) (编译时)
  • __LINE__ => CopLINE(PL_curcop) (编译时)
  • __SUB__ => PL_compcv

  • 如果您在运行时需要它们,请查看上下文中可用的各种数据字段 caller_cx和当前子 (cv)。没有在 parrot 或 perl6 中传递的上下文结构,而是一堆事件的上下文 block 。

    关于perl - 有没有办法从 XS 访问 perl 中的特殊标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42629915/

    相关文章:

    c++ - Perl XSPP - std::string 的多重定义

    c - 如何在 C 代码中构建 Perl 哈希?

    c - 如何将 Perl 堆栈转换为 AV?

    Perl - 使用未初始化的值?

    perl - 将参数传递给 mojolicious 应用程序

    Perl内存分配

    Perl 严格引用错误

    Perl API 内联 C : How to get get a substr of a Perl byte string by reference without copying that string

    perl - 我应该在不会返回到堆栈上的 Perl 的 SV 上调用 SvREFCNT_dec() 吗?