如何在perl脚本中有条件地使用线程?

时间:2013-07-03 17:17:00

标签: multithreading perl

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

2 个答案:

答案 0 :(得分:3)

当加载线程时,perl知道threads::all(和朋友)是一个子程序调用,即使没有括号或&;因为可能没有加载线程,所以只需用括号显式调用它:threads::all()

答案 1 :(得分:2)

use语句在编译时解析。您希望使用requireModule::Load在运行时有条件地提取模块。

这样的事情应该有效:

use Module::Load ();
if($Config{'useithreads'}) {
    Module::Load::load("threads");
}