https://metacpan.org/module/Mouse умеет это и кое-что другое. Работает быстро, так что не путать с Moose.
28 марта 2012 г. 13:43 пользователь Гнатына Александр <[email protected]>написал: > > package My::Base; > sub _prop_simple_call{ > my $self = shift; > my $name = shift; > if(@_){ > $self->{$name} = $_[0]; > } > return $self->{$name}; > } > sub _make_simple_props{ > my $class = shift; > my @names = @{shift||[]}; > for my $name(@names){ > no strict "refs"; > my $func = $class.'::'.$name; > *$func = sub { > my $self = shift; > return $self->_prop_simple_call($name, @_); > } > } > } > > package My::Some; > use base My::Base; > > __PACAKGE__->_make_simple_props([qw(id name title)]); > > В Срд, 28/03/2012 в 15:21 +0600, Nick Knutov пишет: > > Есть ряд объектов, у которых есть заранее известный, но иногда > > меняющийся [в процессе разработки] список полей, для которых надо писать > > геттеры вида > > > > sub id { my $self = shift; return $self->{id}; } > > > > Или с логикой чуть посложнее, но это еще один список полей и полностью > > одинаковый код, кроме имени поля. > > > > Возникла мысль генерить эти методы из заранее определенного списка на > > этапе, например, загрузки модуля или компиляции кода. perldoc что? > > > > Альтернативный вариант - сделать то же самое через AUTOLOAD, вот только > > в гугле находятся несколько очень разных примеров, как это делается, и в > > каждом говорится, что примеров есть разные, но вот именно этот способ > > лучше и избавит от разных проблем и багов. So, как все же это надо > делать? > > > > -- > > Best Regards, > > Nick Knutov > > http://knutov.com > > ICQ: 272873706 > > Voice: +7-904-84-23-130 > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- С уважением, Александр Личный блог: http://eax.me/ Мой форум: http://it-talk.org/ Мой Twitter: http://twitter.com/afiskon
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
