Chủ đề Perl không hỗ trợ chia sẻ tập tin. Tất cả các yếu tố của cấu trúc dữ liệu được chia sẻ phải được chia sẻ. Điều này cho thấy một vấn đề nếu một người cần chia sẻ một đối tượng có chứa một tập tin.Làm thế nào để chia sẻ một đối tượng có chứa một filehandle?
{
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";
Nó thực sự không quan trọng nếu tập tin tay "được chia sẻ" hay không, nó chỉ được sử dụng cho đầu ra. Có lẽ có một thủ thuật mà filehandle được lưu trữ bên ngoài đối tượng được chia sẻ?
Đối tượng này thực sự được chứa trong một đối tượng được chia sẻ khác trong một đối tượng khác, v.v. Sự trớ trêu lớn là các đối tượng được đề cập không bao giờ sử dụng chính các chủ đề, nhưng phải được phối hợp trong suốt quá trình nếu người dùng sử dụng các luồng.
Mã thực trong câu hỏi can be seen here: Các đối tượng này được sử dụng để định cấu hình nơi xuất có định dạng. Một đối tượng là cần thiết vì output does not always go to a filehandle.
+1 để cuối cùng buộc tôi phải nghiên cứu chi tiết cách hoạt động của luồng trong Perl. -1 để ăn cắp 5 giờ ngủ :) – DVK