使用ExtUtils:: constants访问系统常量



我正在尝试使用ExtUtils::Constant从系统头导出C常量。

根据文档,我在Makefile.PL中:

ExtUtils::Constant::WriteConstants (
    NAME => 'Foo::Bar',
    NAMES => [ qw(EPOLLIN EPOLLOUT) ]
);

Then in 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.

您可能需要将常量作为函数引用Foo::Bar::EPOLLOUT()

ExtUtils::Constant文档说它使用autolload。要使裸词起作用,它们需要被定义为"实"常数。

相关内容

  • 没有找到相关文章

最新更新