问题标签 [perlapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
81 浏览

perl - 是否有可能知道使用 `&sub` 调用了`XSUB`

PPsub 被调用时CX,这个 sub 被创建。
通过访问这个上下文,CxHASARGS(CX_CUR())我们可以检查这个子hasargs是否。

但是对于XSUB上下文没有创建,所以我们不能使用这个技巧。

是否有可能知道使用或不XSUB调用?&sub

UPD在何时
查看来源。我们可以看到代码如何处理. 它访问然后稍后调用目标:pp_entersubcvXSUBhasargsPL_op->op_flags & OPf_STACKEDXSUB

如果我在我XSUB做同样的检查可以PL_op->op_flags & OPf_STACKED吗?

0 投票
1 回答
173 浏览

perl - Perl API Inline C:如何通过引用获取 Perl 字节字符串的子字符串而不复制该字符串

你好社区我希望我能在这里遇到一些字节字符串专家。我猜 SvPVbyte 发挥作用,但如何?

我的问题。我已经使用 Perl 在 Inline:C 中成功地解析了 Perl 数组 XYZ(在数组的哈希中),示例索引为 6789:

内联 C:

这完美地工作。但是假设我在 Perl $xyz="\x09\x07\x44\xaa 中有一个很长的字节字符串(大约 10-50MB)......

现在我想传递对这个 SV 的引用,并在 C 部分中通过这个字符串以 9 个字节的步长(类似 substr)走,而不是将它完全复制到自己的 C 数组中。

行走部分:前 4 个字节应与参考 4 字节值 ABC 进行检查,该值也应在函数调用中。如有必要,我可以在此之前解压缩“N”这个搜索短语并使用整数调用函数。如果位置 0 没有成功跳转/增加 9 个字节,如果成功,我将返回找到的位置。

太感谢了。

0 投票
1 回答
294 浏览

linux - 无法再安装 Perlapi?

我正在尝试按照步骤修复快门的禁用编辑按钮,为此,您需要安装libgoo-canvas-perl

我下载了它,但是当我安装时,我得到:

我可以做什么?

0 投票
1 回答
186 浏览

perl - MULTIPLICITY 和 PERL_IMPLICIT_CONTEXT 的关系

MULTIPLICITYPerl API 宏和之间有什么关系PERL_IMPLICIT_CONTEXT

根据perlguts

一个宏控制主要的 Perl 构建风格:MULTIPLICITY. 该 MULTIPLICITY构建具有一个 C 结构,用于打包所有解释器状态。对于启用多重性的 perls,PERL_IMPLICIT_CONTEXT通常也进行了定义,并启用了对传入表示所有三种数据结构的“隐藏”第一个参数的支持。

(顺便问一下,这里指的是哪一个“三种数据结构”?)

我注意到,当我使用以下命令构建 perl 时usethreads

PERL_IMPLICIT_CONTEXTMULTIPLICITY都将被设置(定义)。此外,embedvar.h还有一条可能相关的评论:

MULTIPLICITY支持和 的以下组合PERL_IMPLICIT_CONTEXT
1) 无
2) MULTIPLICITY # 支持兼容性
3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT

这些标志的所有其他组合都是错误的。

只有#3 被直接支持,而#2 是#3 的特例(通过适当地重新定义 vTHX 来支持)。

  • 那么,在编写 XS 代码时,写 #ifdef MULTIPLICITY和写有什么区别#ifdef PERL_IMPLICIT_CONTEXT吗?

  • 这两个变量背后的历史是什么?似乎他们今天可以减少到一个单一的。例如,如果在 perl 源代码中将所有出现的MULTIPLICITY替换为会发生什么?PERL_IMPLICIT_CONTEXT它会破坏什么?

0 投票
1 回答
54 浏览

perl - 如何从 XSUB 设置 Perl 环境变量?

我正在尝试从 XSUB 设置 Perl 环境变量。我希望它在 XSUB 退出之前立即生效。这是我的 XS 文件Module.xs

这是一个使用 XSUB 的 Perl 脚本:

输出是:

我想知道是否可以在不使用的情况下设置环境变量eval_pv()?我可以使用特定的 API 函数吗?

观察:

  • eval_pv()按预期工作,
  • my_setenv()在本地工作并取代设置的值,eval_pv()直到 XSUB 退出,然后恢复旧值。
  • my_setenv()不能用于永久设置 Perl 环境变量,它的效果只在 XSUB 内持续。
  • getenv()并且PerlEnv_getenv()似乎做同样的事情(?)