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