Вещи, имеющие синтаксис вида has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int');
не вариант вообще. Это плохо, это многобукв, так писать не надо. 28.03.2012 15:52, Alexandr Alexeev написал:
https://metacpan.org/module/Mouse умеет это и кое-что другое. Работает быстро, так что не путать с Moose. 28 марта 2012 г. 13:43 пользователь Гнатына Александр <[email protected] <mailto:[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] <mailto:[email protected]> | http://moscow.pm.org -- С уважением, Александр Личный блог: http://eax.me/ Мой форум: http://it-talk.org/ Мой Twitter: http://twitter.com/afiskon
-- 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
