Акжан, спасибо, <br />Но CBOR::XS не сохраняет объекты, как это делает Storable или Sereal<br />Пишет no freeze methods available <br /><br />10:21, 9 декабря 2015 г., Akzhan Abdulin :? Ziii k8 <br /><blockquote>Storable меняем,  где можем,  на CBOR::XS или JSON::XS<br /> 09 дек 2015 г. 6:38 пользователь "Nikolay Mishin" написал:<br /><blockquote><br />Кстати,насчет объектов в Perl<br />вот говорят про Moose,а используют <br />Kelp::Base;<br /> <br />https://github.com/mishin/kelp/blob/master/lib/Kelp/Base.pm<br /> <br />https://github.com/mishin/kelp/blob/master/t/base.t<br />получается типа<br /> <br />package Ftree::Name;<br />use Kelp::Base;<br />attr title => undef;<br />attr prefix => undef;<br />attr first_name => undef;<br />attr mid_name => undef;<br />attr last_name => undef;<br />attr suffix => undef;<br />attr nickname => undef;<br />attr full_name => sub {<br /> my $self = shift;<br /> my @name_array = ( $self->last_name, $self->first_name, $self->mid_name );<br /> join( ' ', @name_array );<br />};<br />package main;<br />use Test::More;<br />my $o = Ftree::Name->new;<br />isa_ok $o, 'Ftree::Name';<br />can_ok $o, qw/title prefix first_name mid_name last_name suffix suffix/;<br />$o->first_name('Николай');<br />is $o->first_name, 'Николай', 'set name is ok';<br />$o->last_name('Мишин');<br />$o->mid_name('Алексеевич');<br />is $o->full_name, 'Мишин Николай Алексеевич', 'fullname ok';<br />done_testing;<br /><br /><br />perl object_example.t<br />ok 1 - An object of class 'Ftree::Name' isa 'Ftree::Name'<br />ok 2 - Ftree::Name->can(...)<br />ok 3 - set name is ok<br />ok 4 - fullname ok<br />1..4<br /> <br />так хорошо писать?<br /><br /> <br />https://github.com/mishin/presentation/blob/master/kelp/object_example.t<br /> <br /> <br /> <br /> <br />как замену https://github.com/mishin/Ftree-cpan/blob/master/lib/Ftree/Person.pm<br /> <br />да и Class::Std::Storable устарел меняем его на просто Storable<br /> <br /> <br />15.10.2015, 13:52, "Михаил Шогин" :<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 написал:<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 :<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 /> Vladimir Timofeev <br /> --<br /> Moscow.pm mailing list<br /> moscow-pm@pm.org | http://moscow.pm.org<br /><br /></blockquote><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 />-- <br />С уважением<br />Николай Мишин<br /> <br /> <br /><br />--<br /> Moscow.pm mailing list<br /> moscow-pm@pm.org | http://moscow.pm.org<br /> <br /></blockquote><br /> -- <br />Moscow.pm mailing list<br />moscow-pm@pm.org | http://moscow.pm.org<br /></blockquote><br /><br />Sincerely, Nikolay Mishin