Я создаю список атрибутов (более трех, показанных ниже), все из которых используют общие методы. Можно ли затем добавить триггер к одному из методов:
# 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.
}
}