我正在开发一个使用 XS 绑定到 C 库的 Perl 模块。当我构建它时,我收到一条警告消息说Use of uninitialized value $num in subtraction (-) at /usr/lib/perl5/vendor_perl/5.14.2/ExtUtils/ParseXS.pm line 1769, <GEN8> line 90.
这是由ExtUtils::Constant生成的代码触发的。INCLUDE: const-xs.inc
注释掉 Foo.xs 中的行会删除警告。但我不知道该错误是在ExtUtils::ParseXS中还是在 ExtUtils::Constant 中。
我正在使用 ExtUtils::Constant 0.23、ExtUtils::ParseXS 3.15、Module::Build 0.38 和 Perl 5.14.2。
我已经设法将它缩减为一个不需要任何外部 C 库的相当小的测试用例,但它仍然太大,无法在此处发布。我已经把它放在了GitHub repo中。要重现该错误,请克隆存储库,perl Build.PL
然后键入./Build
. 你应该看到:
$ perl Build.PL
Regenerating constants...
Created MYMETA.yml and MYMETA.json
Creating new 'Build' script for 'Foo' version '0.01'
$ ./Build
Building Foo
Use of uninitialized value $num in subtraction ...
gcc ... -o lib/Foo.o lib/Foo.c
ExtUtils::Mkbootstrap::Mkbootstrap('blib/arch/auto/Foo/Foo.bs')
gcc ... -o blib/arch/auto/Foo/Foo.so lib/Foo.o
如果您安装了 ExtUtils::Constant,您只会看到“正在重新生成常量...”。您不需要它来重现错误,因为我已将生成的文件添加到存储库中。
无论问题是什么,它似乎都不会阻止代码工作,因为包含的测试确实通过了。
更新:我已将此报告为RT#112776。共识似乎是它是 ExtUtils::ParseXS 中的一个错误,但解决方案尚不清楚。