gpt4 book ai didi

perl - Perl 的 XSUB 怎么会死?

转载 作者:行者123 更新时间:2023-12-04 18:52:47 26 4
gpt4 key购买 nike

我已经为一个 C 库编写了一个 Perl XS 包装器,其中包含大约 80 个
职能。现在我的一般策略是用 C 替换错误
功能与 PL_sv_undef调用 Perl 代码必须明确检查
返回是否不是undef . (对于某些 C 函数,它更复杂
当我将他们的输出转换为 HV/AV并使用空列表报告错误。)

现在,当我开始使用该库编写更大的 Perl 脚本时,我想
简化错误处理和使用,例如通常 eval {}/die类异常
处理错误的机制。

目前,我的 XS 中的一个简单 XSUB 看起来像这样:

SV *
simple_function( param1, param2 = 0, param3 = 0)
int param1
int param2
int param3
CODE:
int rc;
rc = simple_function( param1, param2, param3 );
RETVAL = (rc == 0) ? &PL_sv_yes : &PL_sv_undef;
OUTPUT:
RETVAL

我已经看到一些模块具有全局标志,如“RaiseError”到 die
错误,但找不到任何我可以借鉴的例子。我拥有的几个模块
找到处理 .pm 中的“RaiseError”标志,不在 .xs 内, 和
因此允许使用 Perl 的 die .就我而言,这很难
.pm 内实现许多功能需要特殊的错误检查。那
还会导致代码重复,因为 XS 中已经存在检查。

我在 perlxs 中没有发现任何相关内容/ perlguts 文档。特别是,我看到了对 Perl_croak() 的电话。在 .c由我的 .xs 生成,但未能找到该函数的任何文档。

Perl 的 die 的 XS 模拟是什么? ?或者 XSUB 还能如何向 Perl 报告
函数失败且没有 RETVAL 可返回的运行时?如何正确设置 $@ ?

最佳答案

Perl_croak() 已记录 hereperlapi手册页。正如该页面上的示例所示,您可以将消息字符串传递给它,也可以手动将 $@ 设置为异常对象并传递 NULL。

关于perl - Perl 的 XSUB 怎么会死?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com