我有一个我开发的perl脚本,它运行在具有不同perl版本的主机上,有时用线程编译,有时没有。
我有一个
use if $Config{"useithreads"}, "threads";
我所有特定于线程的代码都处于类似的条件中。
但是,在编译阶段,perl仍然会在threads :: all,threads :: running等上窒息。
我如何确定我的脚本在线程和非线程perls上运行?
[ worr on worr-mn1 ] ( manage_usr_local_admin ) % perl -c acct_mgr_ng.pl
Bareword "threads::joinable" not allowed while "strict subs" in use at acct_mgr_ng.pl line 117.
BEGIN not safe after errors--compilation aborted at acct_mgr_ng.pl line 541.
答案 0 :(得分:3)
当加载线程时,perl知道threads::all
(和朋友)是一个子程序调用,即使没有括号或&
;因为可能没有加载线程,所以只需用括号显式调用它:threads::all()
答案 1 :(得分:2)
use
语句在编译时解析。您希望使用require
或Module::Load在运行时有条件地提取模块。
这样的事情应该有效:
use Module::Load ();
if($Config{'useithreads'}) {
Module::Load::load("threads");
}