Вы можете создать дамп coderef с помощью Data::Dumper после установки $Data::Dumper::Deparse
истинного значения. , но это предназначено только для целей отладки, а не для сериализации.
Я бы посоветовал вам вернуться к рассмотрению того, почему MooseX::Storage не работает для вас, поскольку авторы очень старались представить хорошо абстрагированное и надежное решение для сериализации объектов Moose.
Обновление: похоже, у вас возникли проблемы с сериализацией атрибута _offset_sub
, как описано в этот вопрос а>. Поскольку у этого атрибута есть построитель, и его конструкция довольно тривиальна (он просто смотрит на текущее значение другого атрибута), вам вообще не нужно сериализовать его — когда вы десериализуете свой объект и хотите использовать его снова, построитель будет вызван при первом вызове $this->offset
. Следовательно, вы должны просто пометить его как «не сериализовать»:
use MooseX::Storage;
has '_offset_sub' => (
is => 'ro',
isa => 'CodeRef',
traits => [ 'DoNotSerialize' ],
lazy => 1,
builder => '_build_offset_sub',
init_arg => undef,
);
Наконец, это несколько ортогонально, но вы можете сложить атрибуты offset
и _offset_sub
вместе, используя трейт собственного атрибута «Код»:
has offset => (
is => 'bare',
isa => 'CodeRef',
traits => [ qw(Code DoNotSerialize) ],
lazy => 1,
builder => '_build_offset',
init_arg => undef,
handles => {
offset => 'execute_method',
},
);
sub _build_offset {
my ($self) = @_;
# same as previous _build_offset_sub...
}
person
Ether
schedule
22.10.2010
MooseX:Storage
dors не поддерживают кодовые ссылки (search.cpan.org/~bobtfish/MooseX-Storage-0.28/lib/MooseX/) - person David B   schedule 23.10.2010