Спасибо,  Михаил,<br />ну я так и думал на moose переписать<br />или типа того<br /><br />13:52, 15 октября 2015 г., "Михаил Шогин" <mshogin@gmail.com>:<br /><blockquote>Это конечно не Perl, но все тоже самое можно написать и на Perl-e<br /><br />class NonePerson(BasePerson):<br /><br />    def get_id():<br />        return None<br /><br /><br />class Person(BasePerson):<br /><br />    def get_father():<br />        return self.father or NonePerson()<br /><br />    def get_mother():<br />        return self.mother or NonePerson()<br /><br />    def get_date_of_birth():<br />        return self.birthday  # datetime object<br /><br />    def get_date_of_birth_as_a_very_custom_string():<br />        date = self.birthday.day or ""<br /><br />        if self.birthday.month:<br />            date . = "/" + self.birthday.month<br /><br />        if self.birthday.year:<br />            date . = "/" + self.birthday.year<br /><br />        return date<br /><br /><br />class PersonRowBuilder():<br /><br />    def build(self, person):<br />        row = ()<br />        row.append(person.get_father().get_id())<br />        row.append(person.get_mather().get_id())<br />        row.append(person.get_email())<br />        row.append(person.get_homepage())<br /><br />        return row<br /><br />##################################<br />def info():<br />    person = Person()<br />    birthday = person.get_date_of_birth_as_a_very_custom_string()<br /><br /><br />def method_related_to_db_usage():<br />    builder = PersonRowBuilder()<br />    row = builder.build(Person())<br /><br /><br />15 октября 2015 г., 11:58 пользователь Vladimir Timofeev <vovkasm@gmail.com> написал:<br /><blockquote>Гм...<br /> <br /> push @person_row, $person->get_father_id, $person->get_mother_id,<br /> $person->get_email, $person->get_homepage;<br /> <br /> my $date = $person->get_display_date_of_birth;<br /> <br /> package Person;<br /> <br /> sub get_father_id {<br />   my $self = shift;<br />   if (my $self->get_father) {<br />     return $self->get_father->get_id;<br />   }<br />   return;<br /> }<br /> <br /> ... и  т.д.<br /> <br /> Это раз.<br /> <br /> Можно пойти дальше и объединить построение @person_row в  один метод:<br /> <br />   push @person_row, $person->get_person_fields<br /> <br /> Хотя использование массива здесь выглядит очень подозрительно, но это<br /> уже к вопросу не относится.<br /> <br /> С датами, помимо выноса в отдельный метод кода форматирования, можно<br /> потом вынести код форматирования в класс даты. Потом можно переписать<br /> код форматирования даты, так, чтоб работал корректно во всех случаях.<br /> А то сейчас можно сделать "3/" к примеру (задан только месяц).<br /> <br /> <br /> <br /> <br /> 2015-10-15 5:43 GMT+03:00 Nikolay Mishin <mi@ya.ru>:<br /> > Hi Moscow.PM!<br /> ><br /> > Существует ли какой-либо сбособ сделать более читаемым такой код?:<br /> ><br /> >     push @person_row, (defined $person->get_father()) ? $person->get_father()->get_id() : undef;<br /> >     push @person_row, (defined $person->get_mother()) ? $person->get_mother()->get_id() : undef;<br /> >     push @person_row, ($person->get_email(), $person->get_homepage());<br /> ><br /> >     my $date = "";<br /> >     if(defined $person->get_date_of_birth()) {<br /> >       my $date_of_birth = $person->get_date_of_birth();<br /> >       $date .= defined $date_of_birth->day ? $date_of_birth->day."/" : "";<br /> >       $date .= defined $date_of_birth->month ? $date_of_birth->month."/" : "";<br /> >       $date .= defined $date_of_birth->year ? $date_of_birth->year : "";<br /> >     }<br /> ><br /> > источник https://github.com/mishin/Ftree-cpan/blob/master/lib/Ftree/Exporters/ExcelExporter.pm#L53<br /> ><br /> > --<br /> > С уважением<br /> > Николай Мишин<br /> ><br /> > --<br /> > Moscow.pm mailing list<br /> > moscow-pm@pm.org | http://moscow.pm.org<br /> <br /> <br /> <br /> <br /><br />--<br /> Vladimir Timofeev <vovkasm@gmail.com><br /> --<br /> Moscow.pm mailing list<br /> moscow-pm@pm.org | http://moscow.pm.org<br /> <br /><br /></blockquote><br /><br /><br /><br />-- <br />С уважением<br />Михаил Шогин.<br /><br /> <br /><br /> -- <br />Moscow.pm mailing list<br />moscow-pm@pm.org | http://moscow.pm.org<br /></blockquote><br /><br />Sincerely, Nikolay Mishin