gpt4 book ai didi

perl - 使用 ExtUtils::Constants 访问系统常量

转载 作者:行者123 更新时间:2023-12-04 23:04:59 31 4
gpt4 key购买 nike

我正在尝试使用 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 .

最佳答案

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

ExtUtils::Constant 文档说它使用 AUTOLOAD。为了使裸字起作用,它们需要被定义为“真正的”常量。

关于perl - 使用 ExtUtils::Constants 访问系统常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22433226/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com