Есть ли в Moose способ вызвать обратный вызов, когда содержимое атрибута изменяется с помощью ссылки вместо установки его значения с помощью мутатора?
Давайте предположим следующий код:
has _changed => ( is => 'rw' , isa=>'Bool' ) ;
has attribute => (
is=>'rw', isa=>'Maybe[HashRef]',
default => sub { { a => 1 , b => 2 } },
trigger => sub { shift->_changed(1) }
) ;
триггер работает как положено, устанавливая значение атрибута через мутатор:
$self->attribute({ a => 2 , b => 2 }) ; # OK
, но, устанавливая значение непосредственно с помощью клавиши, триггер не срабатывает (конечно):
$self->attribute->{a} = 3 ; # KO
Я отказался от идеи создания (и сравнения) дайджеста содержимого сериализованного атрибута, потому что это может быть очень большой хэш-адрес с несколькими уровнями вложенности, и создание дайджеста при каждом доступе к атрибуту может привести к проблеме производительности.
Может ли быть возможным решение связанного хеш-значения (в качестве значения атрибута)?
Любая идея или предложение очень ценится.
ПРИМЕЧАНИЕ. Структура содержимого hashref неизвестна (я пишу класс ORM, поэтому структура может варьироваться в зависимости от документов, хранящихся на стороне базы данных NOSQL).