Perl线程不支持共享文件句柄。共享数据结构的所有元素都必须共享。如果需要共享包含文件句柄的对象,则会出现问题。如何共享包含文件句柄的对象?
{
package Foo;
use Mouse;
has fh =>
is => 'rw',
default => sub { \*STDOUT };
}
use threads;
use threads::shared;
my $obj = Foo->new;
$obj = shared_clone($obj); # error: "Unsupported ref type: GLOB"
print {$obj->fh} "Hello, world!\n";
如果文件句柄是“共享”或不是,它只是用于输出。也许有一个把文件句柄存储在共享对象之外的技巧?
该对象实际上包含在另一个共享对象中,该对象位于另一个共享对象中,等等。最大的讽刺之处在于,所讨论的对象从不自己使用线程,但如果用户使用线程,则必须在整个过程中保持协调。
问题can be seen here的实际代码:这些对象用于配置格式化输出的位置。一个对象是必需的,因为output does not always go to a filehandle。
+1最终迫使我详细研究线程是如何在Perl中工作的。 -1偷5个小时的睡眠:) – DVK