Почему?Затем вы получите две копии данных.Вместо этого делегируйте.
has obj => (
is => 'ro',
handles => {
val1 => sub { my $self = shift; my $obj = $self->obj; ... },
val2 => sub { my $self = shift; my $obj = $self->obj; ... },
},
);
Если методы доступа практически идентичны, вы можете сделать что-то вроде
sub make_obj_accessor {
my ($name) = @_;
return sub {
my $self = shift;
my $obj = $self->obj;
... $name ...
};
}
has obj => (
is => 'ro',
handles => {
(map make_obj_accessor($_), qw(
val1
val2
))
},
);
Конечно, если у вас действительно есть только хеш, все что вам нужно -
FOOBAR->new( %hash )