Я создаю список атрибутов (более трех, показанных ниже), все из которых имеют общие методы.Можно ли добавить триггер к одному из методов:
# Create a bunch of attributes
for my $attr ( qw( title name address ) ) {
has $attr => ( is => 'rw', isa => 'Str' );
around $attr => sub {
# more stuff here.
}
}
# Add a trigger
has_another_method 'title' => ( trigger => \&_trigger_title );
Я знаю, что могу получить метаинформацию об атрибутах, но я не нашел ничего, что позволило бы мне изменить методы атрибута (и, возможно, не зря).Возможность сделать это поможет сохранить мой код в чистоте и будет означать, что общие биты определены в одном месте.Если нет, я могу просто создать атрибут отдельно и включить метод триггера.
Обновить
Ответы ясно показали, что изменение атрибута после его создания не является хорошей идеей.,Вместо этого я выбрал другой метод, который позволяет мне хранить все параметры атрибута в одном месте.Этот пример немного упрощен, но он демонстрирует идею:
# Create a bunch of attributes
for my $attr ( qw( title name address ) ) {
my %options = ( is => 'rw', isa => 'Str' );
# Add a trigger to the title attribute.
$options{ 'trigger' } = \&_trigger_title
if $attr eq 'title';
has $attr => ( %options );
around $attr => sub {
# more stuff here.
}
}