Este post é bem rápido e tem com objetivo mostrar o funcionamento do modulo MooseX::Declare e o efeito dele na sintaxe do código. Apesar de ser um exemplo bem simples o intuito aqui não é esgotar o assunto mas sim prover uma certa curiosidade sobre o uso deste módulo.

Para saber mais noticias sobre este módulo veja o doc em http://search.cpan.org/~flora/MooseX-Declare-0.34/lib/MooseX/Declare.pm

Sem mais delongas, vamos ao exemplo e as notas sobre o mesmo:

 

No exemplo acima, podemos perceber que a sintaxe na declaração da classe foi completamente “alterada”.

Na declaração da classe tivemos mudanças radicais…
package People; => class People { … }

Se olharmos bem a declaração dos atributos da classe neste exemplo vamos perceber que não mudaram muito do modo como os declarávamos usando o Moose, mas este por outro lado revolucionou e simplificou e muito a forma tradicional de se criar classes, roles e declarar atributos.


use MooseX::Declare;

class People {

    # class attribute
    has 'name' => ( isa => 'Str', is => 'rw' );

    # method declaration
    method meet_you() {
        say "Prazer em conhecer você, ". 
            $self->name if defined $self->name;
    }
}

Nos métodos também podemos ver uma mudança sutil, não vemos a linha abaixo da declaração do método as inscrições “my $self = shift;” que mesmo no Moose tradicionalmente usávamos para receber a referencia para a objeto instanciado. Esta inscrição agora implícita, simplifica ainda mais a forma com que vemos nossos métodos.

Como vimos no exemplo acima, em Perl nós temos mais de uma maneira de se fazer algo e isso vem ficando cada vez mais evidente. O modulo MooseX::Declare nos traz algumas features muito interessantes e que simplificam ainda mais a forma como lemos e escrevemos nosso código.

Então deem uma olhada no doc que contem melhores exemplos e explicações, faça seus testes e brinque um pouco com o módulo que é bem interessante. ;)