Perl的XSUB怎么会死?

前端之家收集整理的这篇文章主要介绍了Perl的XSUB怎么会死?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我为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”这样的全局标志
错误,但没有找到任何我可以借用的例子.我拥有的几个模块
发现.pm内部处理“RaiseError”标志,而不是.xs内部
因此允许使用Perl的模具.在我的情况下,这很难
在.pm内部实现,因为许多函数需要特殊的错误检查.那
由于检查已经存在于XS中,因此也会导致代码重复.

我在perlxs/perlguts文档中找不到任何相关内容.特别是,我已经看到从我的.xs生成的.c中调用Perl_croak(),但未能找到该函数的任何文档.

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

解决方法

perlpicheak()在perlapi手册页上记录为 here.如该页面上的示例所示,您可以向其传递消息字符串,也可以手动将$@设置为异常对象并传递NULL.

猜你在找的Perl相关文章