Eu acho que está havendo uma pequena confusão aqui. O Catalyst não foi feito para rodar um Hello World. Foi feito para estimular boas práticas de desenvolvimento de webapps, e ajudar o desenvolvedor a deixar seu código com uma fácil manutenção. Por que você iria criar um modelo, uma view, e um controller separados apenas pra rodar um Hello World? Se sua aplicação é tão simples assim, talvez você não devesse usar Catalyst mesmo (Eden, não me mate!!).

http://www.shadowcat.co.uk/archive/conference-video/nwepm/catalyst-dbic/

Catalyst não tem screencasts populares de se fazer blogs em 10 minutos, mas com ele você produz sistemas que você pode voltar meses, anos depois, e vai conseguir manter com facilidade.

Se simplicidade é menos linhas código, experimente estes exemplos:

<?php echo "Hello world" ?>

use CGI;
print "Content-type: text/html\n\nHello world";

Funcionam perfeitamente também.

O código que você colou de sessões no Catalyst é bem diferente do exemplo que você deu do Mojolicious. Faz coisas diferentes, e contém um monte de comentários, por isso é maior. Só porque o código de exemplo é mais amplo não significa que o resultado final é mais complexo.

Na minha opinião, tudo se resume a usar a ferramenta correta para o projeto, cada uma tem prós e contras. E o resto é apenas preferência. TIMTOWTDI. Não sei por que tanta briga.

Abraços!
André

On 07/13/2011 06:48 AM, Nelson Ferraz wrote:
Simplicidade é algo difícil de definir, mas todo mundo consegue identificar.

Vamos começar com um exemplo que eu considero simples:


       use Mojolicious::Lite;

       get '/' => sub {
           my $self = shift;
           my $name = $self->param('name') || 'world';
           $self->render( text => "Hello, $name" );
       };

       app->start();



Esta é uma aplicação mínima, porém completa. Você pode executá-la e testá-la em http://localhost:3000.

Agora, vamos dizer que eu queira usa um template:


       use Mojolicious::Lite;

       get '/' => sub {
           my $self = shift;
           my $name = $self->param('name') || 'world';
*$self->stash( name => $name )*;
       } *=> 'index';*

       app->start();

*       __DATA__
       @@ index.html.ep
<h1>Hello, <%= $name %>!</h1>*



(Sob o ponto de vista didático é conveniene mostrar o template junto com o código, para que as pessoas possam copiar e colar; na prática eu criaria um arquivo dentro de um diretório chamado "templates", que seria reconhecido automaticamente.)

E se eu quiser usar um arquivo de configuração? Basta criar um arquivo chamado "app.conf". (Onde "app" é igual ao nome da aplicação). Exemplo:


       {
           default_name => 'world'
       }



Para usar o arquivo de configuração:



       use Mojolicious::Lite;

*       plugin 'config';
*
       get '/' => sub {
           my $self = shift;
my $name = $self->param('name') || *$self->config('default_name')*;
           $self->stash( name => $name );
       } => 'index';

       app->start();

       __DATA__
       @@ index.html.ep
<h1>Hello, <%= $name %>!</h1>



Se você quiser acessar a variável de configuração a partir do template:


       use Mojolicious::Lite;

       plugin 'config';

       get '/' => sub {
           my $self = shift;
           my $name = $self->param('name');
           $self->stash( name => $name );
       } => 'index';

       app->start();

       __DATA__
       @@ index.html.ep
<h1>Hello, <%= $name *|| config('default_name')* %>!</h1>



Vamos, agora, guardar o nome em uma variável de sessão:


        use Mojolicious::Lite;

        plugin 'config';
        get '/' => sub {
            my $self = shift;

            my $name = $self->param('name')
*                    || $self->session('name')*
                    || $self->config('default_name');

*            $self->session( name => $name );*

            $self->stash( name => $name );
        } => 'index';
            app->start();
        __DATA__
        @@ index.html.ep
<h1>Hello, <%= $name %>!</h1>



Aí está: um exemplo completo, com template, arquivo de configuração externo, e sessão.

Compare com a página de documentação do Catalyst::Plugin::Session:

     # To get sessions to "just work", all you need to do is use these plugins:

     use  Catalystqw/
       Session
       Session::Store::FastMmap
       Session::State::Cookie
       /;

     # you can replace Store::FastMmap with Store::File - both have sensible
     # default configurations (see their docs for details)

     # more complicated backends are available for other scenarios (DBI storage,
     # etc)


     # after you've loaded the plugins you can save session data
     # For example, if you are writing a shopping cart, it could be implemented
     # like this:

     sub  add_item:  Local{
         my  (  $self,  $c  )  =  @_;

         my  $item_id  =  $c->req->param("item");

         # $c->session is a hash ref, a bit like $c->stash
         # the difference is that it' preserved across requests

         push  @{  $c->session->{items}  },  $item_id;

         $c->forward("MyView");
     }

     sub  display_items:  Local{
         my  (  $self,  $c  )  =  @_;

         # values in $c->session are restored
         $c->stash->{items_to_display}  =
           [  map  {  MyModel->retrieve($_)  }  @{  $c->session->{items}  }  ];

         $c->forward("MyView");
     }

Este é o "problema de complexidade".

Se o Catalyst::Lite puder reunir a simplicidade do Mojolicious com a solidez do Catalyst, creio que este será o melhor dos dois mundos.

[]s

Nelson


=begin disclaimer
    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
  SaoPaulo-pm mailing list: [email protected]
  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

=begin disclaimer
   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
 SaoPaulo-pm mailing list: [email protected]
 L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

Responder a