我已经为C库编写了一个PerlXS包装器,它由大约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
我已经看到一些模块具有全局标志,如“raiserror”to
死亡
在
错误,但找不到任何我可以借鉴的例子。我有几个模块
找到句柄“raiseError”标志
.pm
,不在
.xs
和
因此允许使用Perl
死亡
. 在我看来,这很难
在
下午
许多函数都需要特殊的错误检查。那
也会导致代码重复,因为检查已经存在于XS中。
我发现在
perlxs
/
perlguts
文档。尤其是,我看到有人打电话给
Perl_croak()
在
.c
从我的
XS
,但找不到该函数的任何文档。
什么是perl的xs模拟
死亡
?或者XSub如何向Perl报告
运行时函数失败,没有返回的retval?如何正确设置
$@
?