ExtUtils::Constant を使用してシステム ヘッダーから C 定数をエクスポートしようとしています。
ドキュメントに従って、私は Makefile.PL に持っています:
ExtUtils::Constant::WriteConstants (
NAME => 'Foo::Bar',
NAMES => [ qw(EPOLLIN EPOLLOUT) ]
);
次に、Bar.xs で:
#include "const-c.inc"
#include <sys/epoll.h> // hail mary...
MODULE = Foo::Bar PACKAGE = Foo::Bar
INCLUDE: const-xs.inc
ただし、テストを実行すると:
is(Foo::Bar::EPOLLOUT, 4);
私は得る:
t/bar.t Bareword "Foo::Bar::EPOLLOUT" not allowed while "strict subs" in use
これは、EPOLLOUT が定数として存在する場合には当てはまりません。つまり、無効な識別子です。
これはどのように行われるべきですか?これが EPOLLOUT を正しい値に設定できないことにまったく驚いていません-ドキュメントには、 ExtUtils::Constant 「ヘッダーファイルをスキャンしてこれらの定数を抽出するルーチンが含まれていません」とも書かれています-しかし、.xs
生成されたコードは終わっています私の頭では、Foo::Bar::EPOLLOUT が undef 値を持つ識別子として認識されないことに少し驚いており、そうでないという事実により、次に何を試せばよいのか混乱します。
ExtUtils::Constant を使用する別の perl モジュールのソースを検討しますが、exports システムが定義する唯一のものは POSIX であり、これがコアです (他の誰かが知っている場合はコメントを残してください)。
24 時間後: Perl Monksに相互投稿されました。