我想为应用程序提供“人类可读的消息”,如果在运行脚本时缺少模块。然而,我偶然发现了用qw加载模块的问题。perl模块与qw的eval问题
我已经试过如下:
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