尝试在某些线程之间共享Moose对象

时间:2011-08-12 19:32:40

标签: multithreading perl moose

在我的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();

然后我得到'不支持的ref类型:CODE'在这一行:

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

我正在运行5.8.8。

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

任何人都知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

我想我想出来了。我的对象实际上确实包含了内部的coderefs,现在我想到了 - 我怎么能在perl中深度复制coderef?

答案 1 :(得分:0)

Moose使用名为inside-out-object的perl-oo技术

如果threads-1.74 shared_clone不支持克隆这些,请尝试使用threads-1.83 / threads-shared-1.37,以及最新的Moose