Проблема с модулем POSIX

После переноса моего сайта mod_perl с хостинга Linux на FreeBSD у меня есть эта ошибка в файле журнала:

Ваш поставщик не определил макрос POSIX SIGRTMIN, используемый в ../../lib/POSIX.pm (автоматическое разделение на ../../lib/auto/POSIX/SigRt/_init.al), строка 993\n

Скрипт просто импортирует POSIX и использует некоторые функции (ceil и т.д.)

Как я могу решить эту проблему?


person planetp    schedule 03.06.2010    source источник


Ответы (2)


Попробуйте импортировать только несколько подпрограмм (или ни одного) из модуля:

use POSIX ();
my $n = POSIX::ceil(1.1);

Это работало для меня в тех же обстоятельствах, я не знаю, почему :)

person Eugene Yarmash    schedule 03.06.2010

FreeBSD в основном совместима с POSIX. Например, он не определяет SIGRTMIN и SIGRTMAX в своем signal.h. Нас предупреждают об этом в документации POSIX:

Более того, некоторые злые вендоры будут заявлять о соответствии 1003.1, но на самом деле это не так: они не пройдут PCTS (наборы тестов на соответствие POSIX). Например, один поставщик может не определить EDEADLK, или семантика значений errno, установленных open(2), может быть не совсем правильной. Perl не пытается проверить соответствие POSIX. Это означает, что в настоящее время вы можете успешно сказать «использовать POSIX», а затем позже в своей программе вы обнаружите, что ваш поставщик был небрежным, и в конце концов нет пригодного для использования макроса ICANON. Это может быть истолковано как ошибка.

Решение eugene y может сработать, поскольку оно предотвратит автоматический экспорт в ваше пространство имен, но обязательно добавляйте префикс к любым вызовам до ceil и так далее до POSIX::.

person Pedro Silva    schedule 03.06.2010