Вы можете сбросить код с Data::Dumper после установки $Data::Dumper::Deparse
в истинное значение, но это предназначено только для целей отладки, а не для сериализации.
Я бы посоветовал вам вернуться к рассмотрению вопроса о том, почему MooseX :: Storage не работает для вас, поскольку авторы очень старались представить хорошо отвлеченное и надежное решение для сериализации объектов Moose.
Обновление: похоже, что вы работаете в вопросах сериализации атрибут _offset_sub
, как описано в this question. Поскольку у этого атрибута есть построитель, и его конструкция довольно тривиальна (он просто смотрит на текущее значение другого атрибута), вам не нужно сериализовать его вообще - когда вы десериализуете свой объект и хотите его использовать снова, строитель будет вызываться при первом вызове $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
атрибуты вместе, используя родной атрибут «Code» знак:
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...
}
MooseX :: Хранение - рекомендуемый метод. Можете ли вы говорить о проблемах, с которыми вы сталкиваетесь? (Не стесняйтесь всплывать на irc.perl.org #moose.) – Ether
Почему вы хотите сбрасывать coderefs? –
@brian d foy: Я действительно этого не делаю. См. Модуль, связанный в OP. Если у вас есть предложение о сериализации этого объекта без использования coderefs, я буду рад принять его. –