Вы можете сделать что-то подобное (новый рабочий пример после вашего комментария «не работает» ниже):
package My::Class;
use Moose;
use namespace::autoclean;
for my $attr (qw(x y)) {
has $attr => (
is => 'rw',
isa => 'Str',
required => 0,
lazy => 1,
builder => "_build_$attr",
);
}
sub _build_x { rand }
sub _build_y { rand }
__PACKAGE__->meta->make_immutable;
package main;
use strict; use warnings;
my $o = My::Class->new;
print $o->$_, "\n" for qw(x y);
Обратите внимание, что вы не можете указать и default
, и builder
.
@ Оесор указывает в комментарии то, что я забыл:
has ['summary_file', 'html_file', 'url1', 'url2', 'txt_file'] => (
is => 'rw',
isa => 'Str',
required => 0,
lazy_build => 1,
);