POSIX 模块的问题

pla*_*etp 4 perl posix freebsd mod-perl

将我的 mod_perl 站点从 Linux 托管移动到 FreeBSD 后,日志文件中出现以下错误:

您的供应商尚未定义 POSIX 宏 SIGRTMIN,在 ../../lib/POSIX.pm (自动拆分为 ../../lib/auto/POSIX/SigRt/_init.al)第 993 行使用\n

该脚本仅导入 POSIX 并使用一些函数(ceil 等)

我该如何解决这个问题?

Eug*_*ash 5

尝试从模块中仅导入几个(或不导入)例程:

use POSIX ();
my $n = POSIX::ceil(1.1);
Run Code Online (Sandbox Code Playgroud)

这曾经在同样的情况下对我有用,我不知道为什么:)


Ped*_*lva 5

FreeBSD主要 兼容 POSIX。例如,它没有 SIGRTMINSIGRTMAXsignal.h. POSIX 的文档中对此提出了警告:

此外,一些邪恶的供应商会声称符合1003.1,但实际上并非如此:他们不会通过PCTS(POSIX 合规性测试套件)。例如,某个供应商可能未定义 EDEADLK,或者 open(2) 设置的 errno 值的语义可能不太正确。Perl 不会尝试验证 POSIX 合规性。这意味着您当前可以成功地说“使用 POSIX”,然后在您的程序中稍后您会发现您的供应商很松懈,并且根本没有可用的 ICANON 宏。这可以被解释为一个错误。

eugene y的解决方案可能会起作用,因为它会阻止自动导出到您的命名空间,但请务必在任何调用ceil等前面加上POSIX::.