/ / Wie verwende ich Threads in einem Perl-Skript unter bestimmten Bedingungen? - Multithreading, Perl

Wie verwende ich bedingt Threads in einem Perl-Skript? - Multithreading, Perl

Ich habe ein Perl-Skript, das ich entwickelt habe und das auf Hosts mit unterschiedlichen Perl-Versionen ausgeführt wird, manchmal mit Threads kompiliert, manchmal ohne.

Ich habe ein

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

Und mein gesamter Thread-spezifischer Code befindet sich in ähnlichen Bedingungen.

Während der Kompilierungsphase drosselt Perl jedoch immer noch Threads :: all, Threads :: running usw.

Wie kann ich sicherstellen, dass mein Skript sowohl auf Perls mit als auch ohne Thread ausgeführt wird?

 [ 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.

Antworten:

3 für die Antwort № 1

Wenn Threads geladen sind, weiß Perl das threads::all (und Freunde) ist ein Unterprogrammaufruf, auch ohne Klammern oder &; Da Threads möglicherweise nicht geladen werden, rufen Sie sie einfach explizit in Klammern auf: threads::all()


2 für die Antwort № 2

use Anweisungen werden zur Kompilierungszeit analysiert. Sie möchten verwenden require oder Modul :: Laden Bedingtes Einziehen von Modulen zur Laufzeit.

So etwas sollte funktionieren:

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