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 がインストールされている場合にのみ、「Regenerating constants...」が表示されます。生成されたファイルをレポに追加したので、バグを再現するためにそれは必要ありません。
問題が何であれ、含まれているテストがパスするため、コードの動作が停止するようには見えません。
更新:これをRT#112776として報告しました。コンセンサスは ExtUtils::ParseXS のバグであると思われますが、解決策は明確ではありません。