Допустим, я хотел добавить say
функциональность к String
(примечание: это более простой пример, чем реальность) . Так что я мог бы иметь
has foo => (
isa => 'Str',
traits => [ 'String' ],
handles => {
say_foo => 'say',
}
);
, который я тогда, конечно, смог бы использовать.
$self->foo( 'bar' );
$self->say_foo;
который печатал бы буквально
'bar\n'
Я полагаю, что подпрограмма будет выглядеть примерно так
sub _say_attr {
my ( $self, $attr ) = @_;
say $attr;
}
Может ли кто-нибудь помочь мне заполнить пробелы в том, как я мог бы на самом деле реализовать это? Я не особо вижу документацию о том, как написать свой собственный handles
.
Мне не нужно знать, как изменить черты String
. Как бы я не хотел иметь общий обработчик, в котором мне не нужно знать имя текущего атрибута, чтобы он работал.
has foo => (
isa => 'Str',
traits => [ 'PrintString' ],
handles => {
say_foo => 'say',
}
);
has bar => (
isa => 'Str',
traits => [ 'PrintString' ],
handles => {
say_bar => 'say',
}
);
поэтому say
здесь, вероятно, есть идентификатор для функции, которой не требуется жестко закодированное имя атрибута, который ее вызывает.