我正在尝试使用 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 模块的来源,但我能想到的唯一一个导出系统定义的是 POSIX,它是核心(如果其他人知道,请发表评论)。
24 小时后:现在交叉发布在Perl Monks上。