Seções iMasters
iMasters InterCon

Principal evento de WordPress da América Latina, dia 29/06 em SP

Inscreva-se
Desenvolvimento + Framework + Perl

Usando o Catalyst Framework Perl

O Catalyst é um framework livre para o desenvolvimento de aplicações web escritas em Perl, que segue à risca o padrão MVC e suporta um grande número de padrões de desenvolvimento web experimentais. Ele é inspirado por outros frameworks web como Ruby on Rails e Maypole. Ele é primariamente distribuído através do CPAN, que é o repositório oficial para distribuição de bibliotecas e aplicações escritas em Perl.

No artigo de hoje vou ensinar como instalar e imprimir o “Seja Bem Vindo”.

Instalação:

1. Primeiro veja se você tem Perl instalado na sua máquina, no Linux vem por padrão na maioria das distribuições, no Windows você pode instalar o Strawberry, que pode ser baixado no site oficial strawberryperl.com.

2. Para instalar o Catalyst, entre no terminal ou prompt de comando. Depois digite:

$ cpan Catalyst::Runtime Catalyst::Devel

A instalação demora de 5 a 20 minutos, dependendo de sua conexão com a internet.

3. Agora vamos instalar o módulo Template Toolkit no Catalyst, para instalar digite:

$ cpan Catalyst::View::TT

A instalação do desse módulo é rápido.

4. Agora vamos instalar o JSON no Catatalyst, para instalar digite:

$ cpan Catalyst::View::JSON

5. Vamos instalar um módulo importante, que é o DBIx::Class, esse é o principal ORM em Perl, com ele seus problemas com SQL vão se acabar :), vamos instalar os módulos para usarmos o DBIx::Class com Catalyst, então para instalar digite:

$ cpan Catalyst::Model::DBIC::Schema DBIx::Class::Schema::Loader

A instalação pode levar alguns minutos.

Esses são os principais módulos para você criar uma aplicação usando o Framework Catalyst.

Criando aplicação em Catalyst

Agora vamos criar uma aplicação usando o Catalyst. A aplicação vai ter o nome de ”MyApp” – estou usando esse nome porque também é usando nos exemplos da documentação do Catalyst que esta no CPAN, mas você pode escolher o nome que quiser.

Entre novamente em seu terminal ou prompt de comando e escolha um diretório de sua preferência, mas aconselho colocar o diretória www do Apache. Lembrando que não é obrigatório instalá-lo, porque o Calayst não precisa deste programa pra rodar.

Agora vamos criar nossa aplicação.

No terminal do Linux digite:

$ catalyst.pl MyApp

No prompt de comandos do Windows digite:

$ catalyst.bat MyApp

Vai ter um retorno parecido com:

created "MyApp"
created "MyApp/script"
created "MyApp/lib"
created "MyApp/root"
created "MyApp/root/static"
created "MyApp/root/static/images"
created "MyApp/t"
created "MyApp/lib/MyApp"
created "MyApp/lib/MyApp/Model"
created "MyApp/lib/MyApp/View"
created "MyApp/lib/MyApp/Controller"
created "MyApp/myapp.conf"
created "MyApp/lib/MyApp.pm"
created "MyApp/lib/MyApp/Controller/Root.pm"
created "MyApp/README"
created "MyApp/Changes"
created "MyApp/t/01app.t"
created "MyApp/t/02pod.t"
created "MyApp/t/03podcoverage.t"
created "MyApp/root/static/images/catalyst_logo.png"
created "MyApp/root/static/images/btn_120x50_built.png"
created "MyApp/root/static/images/btn_120x50_built_shadow.png"
created "MyApp/root/static/images/btn_120x50_powered.png"
created "MyApp/root/static/images/btn_120x50_powered_shadow.png"
created "MyApp/root/static/images/btn_88x31_built.png"
created "MyApp/root/static/images/btn_88x31_built_shadow.png"
created "MyApp/root/static/images/btn_88x31_powered.png"
created "MyApp/root/static/images/btn_88x31_powered_shadow.png"
created "MyApp/root/favicon.ico"
created "MyApp/Makefile.PL"
created "MyApp/script/myapp_cgi.pl"
created "MyApp/script/myapp_fastcgi.pl"
created "MyApp/script/myapp_server.pl"
created "MyApp/script/myapp_test.pl"
created "MyApp/script/myapp_create.pl"
Change to application directory and Run "perl Makefile.PL" to make sure your install is complete

Depois que digitar o comando acima e ter esse mesmo retorno, sua aplicação foi criada com sucesso.

O Catalyst usa o MVC, que é um padrão de arquitetura de software que visa separar a lógica de negócio, da lógica de apresentação, permitindo o
desenvolvimento, o teste e a manutenção isolados de ambos. Você pode ler mais sobre MVC  na wikipedia 

Um pouco sobre os diretórios

  • Diretório MyApp/lib/MyApp/Model, onde vão ficar os modelos;
  • Diretório MyApp/lib/MyApp/View, onde vão ficar os tipos de visualização;
  • Diretório MyApp/lib/MyApp/Controller, onde vão ficar os controles de nossa aplicação;
  • Diretório MyApp/root, onde vão ficar as imagens, javascript e os templates (html);
  • Diretório MyApp/script, contém os arquivos para manipular
    nosso aplicação, como teste, execução e criação de controles, modelos e
    visualização.

Nos exemplos vou usar, por enquanto, apenas os arquivos myapp_server.pl e myapp_create.pl. O arquivo myapp_server.pl executa o aplicativo gerado dentro de um
servidor de teste do Catalyst, que pode ser usado para testes sem recorrer a uma configuração tipo Apache do servidor web. O arquivo myapp_create.pl auxilia a criar os módulos como controller, view e model.

Criando Welcome e executando

Agora vamos criar o nosso primeiro controle, que vai se chamar Welcome. Primeiro acesse o diretório MyApp e digite:

$ cd MyApp

Depois digite:

No Linux:

$ script/myapp_create.pl controller Welcome

No Windows:

perl script/myapp_create.pl controller Welcome

Vai ter um retorno parecido com esse:

exists "/home/lucas/MyApp/script/../lib/MyApp/Controller"
exists "/home/lucas/MyApp/script/../t"
created "/home/lucas/MyApp/script/../lib/MyApp/Controller/Welcome.pm"
created "/home/lucas/MyApp/script/../t/controller_Welcome.t"

Vai criar o módulo Welcome.pm no diretório MyApp/lib/MyApp/Controller. Agora abra o arquivo Welcome.pm com algum editor de sua preferência.

O arquivo vai conter o código:

    package MyApp::Controller::Welcome;
    use Moose;
    use namespace::autoclean;

    BEGIN { extends 'Catalyst::Controller'; }

    =head1 NAME

    MyApp::Controller::Welcome - Catalyst Controller

    =head1 DESCRIPTION

    Catalyst Controller.

    =head1 METHODS

    =cut

    =head2 index

    =cut

    sub index :Path :Args(0) {
        my ( $self, $c ) = @_;

        $c->response->body('Matched MyApp::Controller::Welcome in Welcome.');
    }

    =head1 AUTHOR

    Lucas Moraes,,,

    =head1 LICENSE

    This library is free software. You can redistribute it and/or modify
    it under the same terms as Perl itself.

    =cut

    __PACKAGE__->meta->make_immutable;

    1;

Agora vamos executar nosso programa.

No Linux:

$ ./script/myapp_server.pl

No Windows:

perl script/myapp_server.pl

Vai retornar isso:

[debug] Debug messages enabled<br />[debug] Statistics enabled
[debug] Loaded plugins:<br />.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader  0.30                                       |
'----------------------------------------------------------------------------'
[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::HTTP"
[debug] Found home "/home/lucas/MyApp"
[debug] Loaded Config "/home/lucas/MyApp/myapp.conf"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| MyApp::Controller::Root                                         | instance |
| MyApp::Controller::Welcome                                      | instance |
'-----------------------------------------------------------------+----------'
[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | MyApp::Controller::Root              | default      |
| /end                 | MyApp::Controller::Root              | end          |
| /index               | MyApp::Controller::Root              | index        |
| /welcome/index       | MyApp::Controller::Welcome           | index        |
'----------------------+--------------------------------------+--------------'
[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /                                   | /index                               |
| /                                   | /default                             |
| /welcome                            | /welcome/index                       |
'-------------------------------------+--------------------------------------'
[info] MyApp powered by Catalyst 5.80032
You can connect to your server at http://lucas-satellite-a200:3000

Para acessar a página de teste, abra seu navegador e digite o endereço acima. No meu caso: http://localhost:3000.

Você vai ver uma pagina parecida com essa na imagem:

Para acessar a página welcome, digite no seu navegador:

http://localhost:3000/welcome">http://localhost:3000/welcome

Você vai ver esse resultado:

Matched MyApp::Controller::Welcome in Welcome.

É o que está escrito no código do módulo Welcome.pm:

$c->response->body('Matched MyApp::Controller::Welcome in Welcome.');

Agora troque esta mensagem por por outra de sua preferência no lugar de ”Matched MyApp::Controller::Welcome in Welcome.”, como por
exemplo, “Seja Bem Vindo”.

Depois da mudança execute novamente o arquivo script/myapp_server.pl para compilar novamente sua aplicação.

Esse é o fim da primeira parte, você pode encontrar mais informações nos links abaixo:

Muito obrigado e espero que você tenha gostado!

Comente também

10 Comentários

Elisa

Amei, gatinho, embora não tenha entendido muito…
Vc é o máximo e vai longe, se Deus quiser…
Um grande beijo e sucesso!!!

Rodrigo

Com tantos fw web das linguagem ruby, php, python, etc
alguém poderia me dizer um motivo para utilizar ainda perl na web com catalyst?
qual beneficio disso?

    Lucas Moraes

    Rodrigo os Framework Dessas linguagens não chega nem nos pés do Catalyst, alem de ser muito mais flexível, ele conta com o poder do CPAN, mas não estou aqui para expor meus pensamentos e sim promover a linguagem Perl, cada linguagem tem suas qualidade e seus defeitos. Cara a vantagem do Perl que você vai para casa mais cedo, Não precisa ficar se matando nas horas extras, 95% que você ira usar já existe módulos prontos no CPAN que você também pode adicionar seus módulos. Ruby e Python esta no auge, me faz lembrar do ASP! =P

    Eduardo Almeida

    Respondo com uma pergunta: Por que então Ruby, Python e PHP foram feitas baseadas em Perl

Rodrigo

esses modulos que você fala, assim como as gems em ruby on rails?
ficou meio vago a sua resposta, mas tudo bem
grato

    Lucas Moraes

    No CPAN tem todos tipos de módulos com: Framework, ORM, Paginação, Teste e etc.. Eu gostaria de convidar você a entrar em nossa lista de discussão no site http://sao-paulo.pm.org é só criar no menu lista e também no IRC: Servidor irc.perl.org, canal #sao-paulo.pm
    Lá eu e mais pessoas poderia te falar das vantagens do Perl e você vai encontrar programadores de outras linguagens, eu mesmo também programo em PHP. Falou.

rafael silveira

bom, eu sei q o cpan tem um total de 99.000+ pacotes!

Leandro Arruda

Lucas Moraes, gostaria de parabeniza-lo pela iniciativa e aproveitar a oportunidade para tirar algumas dúvidas. O que faço de melhor é em java, estou procurando minha linguagem para desenvolvimento web. Há meses levanto informações sobre Perl e queria saber se o poderoso framework Catalyst pode ser utilizado a partir da construção de código através de um editor de texto sem formatação e posteriormente compilarmos o arquivo construído através de comando inseridos no terminal (Linux) ou prompt de comando (Windows) ou se de fato a única forma de utilizar o Catalyst é diretamente no terminal ou prompt?

Por exemplo, sou aficionado pelo Sublime Text 2 e gostaria de saber é possível utilizar as peculiaridades do Catalyst nele. Perl em estado puro, tem seu desenvolvimento facilitado por plugins simples e outros mais avançados. E o Catalyst editores é possível o seu uso? Se não houver plugins, seria uma ótima opção a possibilidade de ao menos apenas compilarmos nossas aplicações nos terminais.

Você posse explanar um pouco a partir de sua experiência?

    Lucas Moraes

    Sim Leandro, você pode usar qualquer editor para criar seus códigos em Catalyst. O Catalyst tem ferramentas via comandos que facilita nossa vidas, mais conhecido como helpers que ajuda a você configurar vários plugins do Catalyst sem precisar digitar código, mas se quiser fazer na mão, pode sim é só ler o manual e depois compilarmos. Catalyst roda em CGI também, mas é um desperdício de desempenho fazer isso. por isso tem mod_perl, FastCGI e Starman. Leandro entre em nosso lista e no canal do irc, lá você vai encontrar mais pessoas que possam te ajudar.

    Lista: http://mail.pm.org/mailman/listinfo/saopaulo-pm
    IRC Rede: irc.perl.org Canal: #sao-paulo.pm

    Seja bem vindo ao mundo Perl, você vai se surpreender :)

Qual a sua opinião?