Я пытаюсь дать «человеко читаемое сообщение» для приложения, если отсутствуют недостающие модули при запуске скрипта. Однако я наткнулся на проблему, когда дело доходит до загрузки модулей с qw.perl модуль eval проблемы с qw
Я попытался следующие:
use strict;
...
if (! eval { require Proc::Daemon;1; }) {
push (@install_packages, "Proc::Daemon");
} else {
Proc::Daemon->import(qw(SOCK_STREAM SOMAXCONN));
}
Однако он не
Bareword "SOCK_STREAM" not allowed while "strict subs" in use at ./revmon.pl line 144.
Bareword "SOMAXCONN" not allowed while "strict subs" in use at ./revmon.pl line 144.
Использование использования, очевидно, не работает, как это даст нормальный сообщения об ошибке
Can't locate Proc/Daemon.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .)
BEGIN failed--compilation aborted at ./revmon.pl line 11.
Добавление * к головому слову ничем не помогает, так как он используется только один раз, что вызовет еще одну ошибку с использованием wa rnings;
Есть ли способ обойти это, чтобы заставить BAREWORDS работать правильно, когда модуль может быть загружен успешно?
Я не могу воспроизвести это. Какую версию/платформу Perl вы используете? Он работает, если вы вызываете 'Proc :: Daemon-> import (" SOCK_STREAM "," SOMAXCONN ")'? – mob