Gwinty Perla nie obsługują udostępniania uchwytów plików. Wszystkie elementy udostępnionej struktury danych muszą być udostępniane. Stanowi to problem, jeśli trzeba udostępnić obiekt zawierający uchwyt pliku.Jak udostępnić obiekt zawierający uchwyt pliku?
{
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";
To naprawdę nie ma znaczenia, czy uchwyt pliku jest "udostępniony", czy nie, służy tylko do wydruków. Być może istnieje sztuczka, w której uchwyt pliku jest przechowywany poza udostępnionym obiektem?
Ten obiekt jest aktualnie zawarty w innym obiekcie udostępnionym, który znajduje się w innym obiekcie i tak dalej. Wielka ironia polega na tym, że przedmiotowe obiekty nigdy nie używają samych wątków, ale muszą pozostać skoordynowane w całym procesie, jeśli użytkownik używa wątków.
Rzeczywisty kod, o którym mowa: can be seen here: Te obiekty służą do konfiguracji miejsca, w którym znajduje się sformatowane wyjście. Obiekt jest konieczny, ponieważ output does not always go to a filehandle.
+1 za to, że zmuszam mnie do szczegółowego zapoznania się z działaniem wątków w Perlu. -1 za kradzież 5 godzin snu :) – DVK