Mam skrypt perla, który stworzyłem, działający na hostach, które mają różne wersje perla, czasem skompilowane z wątków, a czasami bez.
mam
use if $Config{"useithreads"}, "threads";
A cały mój kod specyficzny dla wątku jest podobny do warunkowych.
Jednak podczas fazy kompilacji perl wciąż dławi wątki :: all, threads :: running, itp.
Jak mogę się upewnić, że mój skrypt działa zarówno na wątkach gwintowanych, jak i bez wątków?
[ 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.
Odpowiedzi:
3 dla odpowiedzi № 1Gdy wątki są ładowane, perl o tym wie threads::all
(i przyjaciele) to wywołanie podprogramu, nawet bez nawiasów lub &
; ponieważ wątki nie mogą być ładowane, po prostu jawnie nazwij je nawiasami: threads::all()
2 dla odpowiedzi nr 2
use
instrukcje są analizowane w czasie kompilacji. Chcesz użyć require
lub Moduł :: Ładuj wciągać moduły warunkowo w czasie wykonywania.
Coś takiego powinno działać:
use Module::Load ();
if($Config{"useithreads"}) {
Module::Load::load("threads");
}