Modern Perl

May 02, 2009 23:08


Провёл праздники в перловых пучинах, выбираюсь оттуда просветлённый. Во-первых, наконец-то понял, для чего нужны правильные ORMы на примере DBIx::Class. Во-вторых, посмотрел на Modern::Perl, фичи из Perl6 и общие перспективы на Perl6.

А главное - наигрался с Moose. Это просто чума! На обычном перле такой фантастики наворотить! Сделали мощную объектную метамодель, так что теперь можно определять классы со свойствами, с наследованием, с ролями:

use MooseX::Declare; class BankAccount { has 'balance' => ( isa => 'Num', is => 'rw', default => 0 ); method deposit (Num $amount) { $self->balance( $self->balance + $amount ); } method withdraw (Num $amount) { my $current_balance = $self->balance(); ( $current_balance >= $amount ) || confess "Account overdrawn"; $self->balance( $current_balance - $amount ); } } class CheckingAccount extends BankAccount { has 'overdraft_account' => ( isa => 'BankAccount', is => 'rw' ); before withdraw (Num $amount) { my $overdraft_amount = $amount - $self->balance(); if ( $self->overdraft_account && $overdraft_amount > 0 ) { $self->overdraft_account->withdraw($overdraft_amount); $self->deposit($overdraft_amount); } } }
А ещё сделали мультиметоды как задумывалось в perl6:

package Game; use Moose; use MooseX::MultiMethods; multi method play (Paper $x, Rock $y) { 1 } multi method play (Paper $x, Spock $y) { 1 } multi method play (Scissors $x, Paper $y) { 1 } multi method play (Scissors $x, Lizard $y) { 1 } multi method play (Rock $x, Scissors $y) { 1 } multi method play (Rock $x, Lizard $y) { 1 } multi method play (Lizard $x, Paper $y) { 1 } multi method play (Lizard $x, Spock $y) { 1 } multi method play (Spock $x, Rock $y) { 1 } multi method play (Spock $x, Scissors $y) { 1 } multi method play (Any $x, Any $y) { 0 }
Или - сделали эксепшны, почти как настоящие:

use TryCatch; sub foo { try { # some code that might die return "return value from foo"; } catch (Some::Class $e where { $_->code > 100 } ) { } }
Вот такая вот восхитительная магия (или сильное колдунство - кому как). Осталось до конца осознать, как это всё грамотно использовать с Catalyst'ом - и золотой ключик у нас в кармане!



perl

Previous post Next post
Up