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 № 1Wenn 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");
}