use strict; use threads; use threads::shared; { package ThreadableObj; use Moose; use threads::shared; use Data::Dump qw/dump/; sub BUILD { my $self = shift; # here the blessed() already be the version in threads::shared bless shared_clone($self), ref($self); print dump($self),"\n"; return $self; } has foo => ( is => 'rw', isa => 'Str' ); has bar => ( is => 'rw', isa => 'Int' ) } # here dies my $obj : shared = ThreadableObj->new(foo=>'foovalue'); #### Invalid value for shared scalar at XXXXX #### bless({ bar => 123, foo => "foovalue" }, "ThreadableObj")