我试图找到一种方法来忽略某段代码中的模块,以便我可以将线程模块与非线程安全模块Win32 :: OLE一起使用。
use strict;
use warnings;
use Win32::OLE;
#Do some OLE stuff
#unimport Win32::OLE
use threads;
my $exec_command = threads->create(sub{});
$exec_command->join();
#reimport Win32::OLE
答案 0 :(得分:1)
您不能在主线程上使用Win32::OLE
,除非您先创建所有其他线程。但是,您可以在子线程中使用该模块。请注意require
而不是use
。
my $ole_thread = threads->create(sub {
require Win32::OLE;
# do OLE stuff
});
my $result = $ole_thread->join();
[引用http://www.perlmonks.org/?node_id=595491]
这种方法可能适用于非线程安全的其他模块。但是你应该谨慎使用来自单个非主线程的模块。