4

私が開発した perl スクリプトは、さまざまなバージョンの perl を持つホストで実行され、スレッドを使用してコンパイルされる場合もあれば、スレッドなしでコンパイルされる場合もあります。

私は

use if $Config{"useithreads"}, "threads";

そして、私のスレッド固有のコードはすべて、同様の条件にあります。

ただし、コンパイル段階では、perl は依然としてスレッド::すべて、スレッド::実行中などでチョークします。

スクリプトがスレッド化された perl とスレッド化されていない perl の両方で実行されることを確認するにはどうすればよいですか?

 [ 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ステートメントはコンパイル時に解析されます。requireまたはModule::Loadを使用して、実行時に条件付きでモジュールを取り込みます。

このようなものが動作するはずです:

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