4

我有一个我开发的 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.
4

2 回答 2

3

当线程被加载时,perl 知道threads::all(和朋友)是一个子例程调用,即使没有括号或&; 由于线程可能不会被加载,只需用括号显式调用它:threads::all()

于 2013-07-03T18:02:44.850 回答
2

use语句在编译时解析。您想使用requireModule::Load在运行时有条件地拉入模块。

像这样的东西应该工作:

use Module::Load ();
if($Config{'useithreads'}) {
    Module::Load::load("threads");
}
于 2013-07-03T17:33:12.637 回答