Попытка поделиться объектом Moose между несколькими потоками. - PullRequest
1 голос
/ 12 августа 2011

В моем moosified пакете TheObject я пытаюсь сделать это:

around 'new' => sub {
    my $orig=shift;
    my $class=shift;
    my $self=$class->$orig(@_);
    my $shared_self : shared = shared_clone($self);
    return $shared_self;
};

Затем в коде с потоками:

my $obj :shared =new TheObject();

Но тогда я получаю 'Неподдерживаемый тип ссылки:CODE 'в этой строке:

my $shared_self : shared = shared_clone($self);

Я использую 5.8.8.

perl -Mthreads -le'print $threads::VERSION'
1.74

Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Я думаю, я понял это. Мой объект на самом деле содержит внутри себя coderefs, и теперь, когда я об этом думаю - как бы я мог глубоко скопировать coderef в perl?

0 голосов
/ 14 августа 2011

Moose использует технику perl-oo, называемую inside-out-object

Если threads-1.74 shared_clone не поддерживает их клонирование, попробуйте использовать threads-1.83 / threads-shared-1.37, а также последнюю версиюMoose

...