Catalyst é sem dúvidas o melhor framework web do momento. E vai continuar sendo por muito tempo. <br>Vá em frente, você não vai se arrepender, ninguem se arrepende. <br>Leia o manual do catalyst no cpan, lá tem tudo que você irá precisar inicialmente. A documentação é bastante farta e completa.<br>
Recomendo HTML::FormHandler para trabalhar formulários web.<br>É bom se familiarizar também com DBIx::Class, conforme suas dúvidas forem aparecendo.... aqui estão todas as respostas para as questões de acesso a banco de dados... leia aqui antes de perguntar, garanto que a resposta está em alguma página do DBIx::Class.<br>
<br>Um exemplo de acesso à tabela produtos com DBIx::Class:<br><br>my $products = $c-&gt;model(&#39;DB::Product&#39;)<br>  -&gt;search({<br>    categoria =&gt; &#39;computadores&#39;,                              #traz tudo que é categoria computadores<br>
    preco =&gt; { &#39;&gt;=&#39;, 500 },                                        # traz tudo com preço &gt;= 500<br>    },{<br>      rows=&gt; 5,                                                       #opcional, a busca vai trazer limitar a 5 linhas<br>
      page=&gt; 1,                                                       #opcional,  vai trazer apenas esta página<br>      order_by =&gt; { -asc =&gt; [qw/created/] },               #opcional, vai ordenar por data de criação <br>
      });<br><br>ai vc pode fazer um loop nos produtos ex:<br><br> while (my $p = $products-&gt;next) {<br>    $c-&gt;log-&gt;debug(&#39;nome do produto&#39;, $p-&gt;nome );<br>    $c-&gt;log-&gt;debug(&#39;nome do produto&#39;, $p-&gt;categoria );<br>
    $c-&gt;log-&gt;debug(&#39;nome do produto&#39;, $p-&gt;preco );<br>    }<br><br>Se você percebeu, esses códigos seriam executados nos controllers... como seria isso em uma view ? o catalyst utiliza o Template::Toolkit, que tem um excelente manual tb: ex <a href="http://template-toolkit.org/docs/manual/VMethods.html#method_match">http://template-toolkit.org/docs/manual/VMethods.html#method_match</a><br>
<br>então seguindo o exemplo acima, vamos supor que eu selecionei os $products... então o próximo passo seria jogar esses $products no &quot;stash&quot; do catalyst.. <br>O &quot;stash&quot; é um espaço/hash reservado onde você pode armazenar dados que serão acessados em outros métodos/view/partes do código.<br>
Então para setar os $products no stash faremos o seguinte:<br><br>$c-&gt;stash(<br>products =&gt; $products,<br>template =&gt; &#39;template-legal.tt2&#39;,<br>current_view =&gt; &#39;TemplatePadrao&#39;,<br>);<br><br>pronto, eu poderia ir para outro método e acessar o $c-&gt;stash-&gt;{products} , ou, posso ir para minha View e acessá-lo, conforme o exemplo: <br>
<br>(no template-legal.tt2):<br><br>&lt;div&gt;<br>....<br>[% WHILE (product = products.next) %]<br>Nome: [% product.nome %]<br>Preço: [% product.preco %]<br>Categoria: [% product.categoria %]<br>[% END %]<br>....<br>&lt;/div&gt;<br>
<br><br><br>Ok, agora só falta um exemplo de formulário com HTML::FormHandler:<br><br>        my $form = HTML::FormHandler-&gt;new( <br>            field_list =&gt;   [<br><br>            nome =&gt; { <br>              type =&gt; &#39;Text&#39;, <br>
              label =&gt; &#39;Nome&#39;,<br>              required =&gt; 1,<br>              required_message =&gt; &#39;Campo obrigatório&#39; ,<br>            },<br><br>            sexo =&gt; { <br>
              type =&gt; &#39;Select&#39;, <br>
              label =&gt; &#39;Sexo&#39;,<br>
              required =&gt; 1,<br>
              required_message =&gt; &#39;Campo obrigatório&#39; ,<br>              options =&gt; [<br>              { label =&gt; &#39;SIM&#39;, value =&gt; &#39;SIM&#39;},<br>              { label =&gt; &#39;NÃO&#39;, value =&gt; &#39;NÃO&#39;},<br>
              ],<br>
            },<br><br>            submit =&gt; {<br>              type =&gt; &#39;Submit&#39;, <br>              value =&gt; &#39;Salvar&#39;,<br>            },<br><br>            ]);<br><br><br><br><br><br>         if ($c-&gt;req-&gt;method eq &#39;POST&#39;) {                    #Assim podemos verificar o methodo do request<br>
           $form-&gt;process( params =&gt; $c-&gt;req-&gt;params );              # E acessar as chaves/valores do formulario postado<br>         }<br><br>         $c-&gt;stash( form =&gt; $form );                          # Jogamos o form no stash para acessar na view<br>
<br><br>         return unless $form-&gt;validated;                      # Tentamos validar o formulario<br><br>         $c-&gt;response-&gt;redirect($c-&gt;uri_for(&#39;/&#39;));               # e assim redirecionamos para a url /<br>
<br><br>Certo, depois para renderizar isto na view é muito simples... apenas:<br><br>&lt;div&gt;<br>...<br>[% form.render %]<br>...<br>&lt;/div&gt;<br><br><br><br><br>Espero ter ajudado a visualizar um pouco como as coisas básicas funcionam.<br>
<br>Fora isso o resto é auto explicativo, catalyst é bastante direto e sem complicações. <br>e conforme já foi dito, é possível criar aplicações simples e complexas.<br><br>dá gosto trabalhar com catalyst!!!o melhor framework web, sem dúvidas!<br>
<br>att<br><br>Hernan<br><br><br><br><div class="gmail_quote">2011/1/7 Blabos de Blebe <span dir="ltr">&lt;<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Eu tenho usado bastante o Mojolicious::Lite para prototipação.<br>
<br>
Experimentei brevemente o Dancer e gostei da documentação.<br>
<br>
Mojo e Dancer tem uma curva de aprendizagem bem suave. Você passa o<br>
olho na doc e sai fazendo.<br>
<br>
Já o Catalyst, por ser mais parrudo é mais chatinho no começo, depois melhora.<br>
<br>
...<br>
<br>
Divagando...<br>
<br>
Não que seja o caso, nem é o foco da thread e talvez até contextualize<br>
o tom da brincadeira, mas se eu vejo uma frase começando com &#39;não me<br>
importo em *ter que* X&#39;, ou &#39;não tenho *problema* em Y&#39;, acende aquele<br>
sinal de alerta.<br>
<br>
*Se* passa pela cabeça a expressão &#39;ter que programar em Perl&#39; um<br>
conselho que eu dou: *Não faça isso*.<br>
<br>
Perl será uma linguagem iadequada, feia, cheia de caracteres<br>
estranhos, write-only, não importa qual framework utilizado.<br>
<br>
End of divagation<br>
<div><div></div><div class="h5"><br>
Abraços<br>
<br>
2011/1/7 Rogerio Ferreira &lt;<a href="mailto:rogeriotux@gmail.com">rogeriotux@gmail.com</a>&gt;:<br>
&gt; ,<br>
&gt;<br>
&gt; Eu não tenho problema em escrever em Perl, Python, ou outra coisa qualquer.<br>
&gt; Só quero escolher um framework pra acelerar as coisas pro Projeto que vou<br>
&gt; iniciar.<br>
&gt;<br>
&gt; Mas já valeu pelo cases que o Breno passou que usam Catalyst.<br>
&gt;<br>
&gt; Em 7 de janeiro de 2011 15:13, Blabos de Blebe &lt;<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>&gt; escreveu:<br>
&gt;&gt;<br>
&gt;&gt; Escrever Perl é como sexo.<br>
&gt;&gt;<br>
&gt;&gt; Pode ser prazeroso ou dolorozo dependendo de como você fizer.<br>
&gt;&gt;<br>
&gt;&gt; Por isso é uma diversão melhor indicada para adultos que sabem o que<br>
&gt;&gt; estão fazendo :)<br>
&gt;&gt;<br>
&gt;&gt; Abraços<br>
&gt;&gt;<br>
&gt;&gt; 2011/1/7 Rogerio Ferreira &lt;<a href="mailto:rogeriotux@gmail.com">rogeriotux@gmail.com</a>&gt;:<br>
&gt;&gt; &gt; Valeu Breno!<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Como ainda não tomei a decisão sobre qual Framework vou usar, a sua<br>
&gt;&gt; &gt; explanação vai dar alguma orientação. Mas vou fazer mais alguns testes<br>
&gt;&gt; &gt; com o<br>
&gt;&gt; &gt; Catalyst, e como não sou religioso de linguagem alguma, a pesar de já<br>
&gt;&gt; &gt; ter<br>
&gt;&gt; &gt; sido com Python, quando desenvolvia com Zope/Plone, não me importo em<br>
&gt;&gt; &gt; ter<br>
&gt;&gt; &gt; que escrever código em Perl.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Obrigado pelas informações.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Em 7 de janeiro de 2011 12:56, breno &lt;<a href="mailto:breno@rio.pm.org">breno@rio.pm.org</a>&gt; escreveu:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 2011/1/7 Rogerio Ferreira &lt;<a href="mailto:rogeriotux@gmail.com">rogeriotux@gmail.com</a>&gt;:<br>
&gt;&gt; &gt;&gt; &gt; Oi Pessoal,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Oi Rogério, bem-vindo!<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt; Estou postando essa mensagem na lista, pois acredito que não lugar<br>
&gt;&gt; &gt;&gt; &gt; melhor<br>
&gt;&gt; &gt;&gt; &gt; para chegar a uma conclusão. Já conheço alguns Frameworks, CMSs,<br>
&gt;&gt; &gt;&gt; &gt; etc...,<br>
&gt;&gt; &gt;&gt; &gt; e<br>
&gt;&gt; &gt;&gt; &gt; algumas linguagens de scripting. Eu tenho um projeto para iniciar e<br>
&gt;&gt; &gt;&gt; &gt; andei<br>
&gt;&gt; &gt;&gt; &gt; pesquisando sobre o Catalyst, apesar de conhecer Rails, e como não<br>
&gt;&gt; &gt;&gt; &gt; gosto<br>
&gt;&gt; &gt;&gt; &gt; muito de Django, a pesar de gostar de python, eu tenho pretensão de<br>
&gt;&gt; &gt;&gt; &gt; usar<br>
&gt;&gt; &gt;&gt; &gt; o<br>
&gt;&gt; &gt;&gt; &gt; Catalyst neste projeto. Por isso gostaria de saber de vocês, já que<br>
&gt;&gt; &gt;&gt; &gt; aqui<br>
&gt;&gt; &gt;&gt; &gt; é a<br>
&gt;&gt; &gt;&gt; &gt; vossa praia, sobre suas experiências com o Framework, tais como:<br>
&gt;&gt; &gt;&gt; &gt; Agilidade<br>
&gt;&gt; &gt;&gt; &gt; para Produzir Resultados, Performance, Manutenção de<br>
&gt;&gt; &gt;&gt; &gt; Código Produzido e<br>
&gt;&gt; &gt;&gt; &gt; projetos que já usam Catalyst em ambiente de grande demanda de<br>
&gt;&gt; &gt;&gt; &gt; acessos<br>
&gt;&gt; &gt;&gt; &gt; simultaneos.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Quem puder compartilhar comigo algo a respeito, eu ficarei grato.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; O Catalyst é um excelente framework, estável e robusto, e permite o<br>
&gt;&gt; &gt;&gt; desenvolvimento de aplicações escaláveis desde a primeira linha de<br>
&gt;&gt; &gt;&gt; código. De fato, ele foi projetado pra isso, então o primeiro<br>
&gt;&gt; &gt;&gt; resultado pode não ser tão rápido quando em um framework mais simples,<br>
&gt;&gt; &gt;&gt; mas o quinto resultado será muito mais rápido e gratificante. Se vc<br>
&gt;&gt; &gt;&gt; leu o XKCD dessa semana[<a href="http://xkcd.com/844/" target="_blank">http://xkcd.com/844/</a>], o Catalyst faz um<br>
&gt;&gt; &gt;&gt; esforço bastante válido e razoável pra ligar o &quot;code right&quot; com o<br>
&gt;&gt; &gt;&gt; &quot;code fast&quot; (e, quem sabe, te tirar eventualmente do loop infinito e<br>
&gt;&gt; &gt;&gt; levar ao mítico &quot;good code&quot;) :-)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; A agilidade para produzir resultados, infelizmente, e<br>
&gt;&gt; &gt;&gt; consequentemente, depende do seu grau de conhecimento. Mais ainda<br>
&gt;&gt; &gt;&gt; (alguns diriam até que principalmente), é importante que ele se<br>
&gt;&gt; &gt;&gt; encaixe com seu modo de pensar. Como o Catalyst é a grande cola entre<br>
&gt;&gt; &gt;&gt; soluções de templating e ORMs, vc precisa saber usar todas essas<br>
&gt;&gt; &gt;&gt; pontas para chegar a resultados palpáveis. Do lado das Views temos o<br>
&gt;&gt; &gt;&gt; Template Toolkit como escolha da maioria. Já para o Model você pode ir<br>
&gt;&gt; &gt;&gt; do robusto DBIx::Class a alternativas como MongoDB, CouchDB ou mesmo<br>
&gt;&gt; &gt;&gt; KiokuDB.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Experimente fazer o<br>
&gt;&gt; &gt;&gt; tutorial[<a href="http://search.cpan.org/perldoc?Catalyst::Manual::Tutorial" target="_blank">http://search.cpan.org/perldoc?Catalyst::Manual::Tutorial</a>] e<br>
&gt;&gt; &gt;&gt; ver se vc se sente confortável com o Catalyst. O tutorial cobre ainda<br>
&gt;&gt; &gt;&gt; o básico de Template Toolkit e DBIx::Class. Se gostar, pode comprar o<br>
&gt;&gt; &gt;&gt; livro<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; [<a href="http://www.amazon.co.uk/Definitive-Guide-Catalyst-Maintainable-Applications/dp/1430223650?&amp;camp=2486&amp;linkCode=wey&amp;tag=enligperlorga-21&amp;creative=8882" target="_blank">http://www.amazon.co.uk/Definitive-Guide-Catalyst-Maintainable-Applications/dp/1430223650?&amp;camp=2486&amp;linkCode=wey&amp;tag=enligperlorga-21&amp;creative=8882</a>].<br>

&gt;&gt; &gt;&gt; Se não gostar, não vale muito a pena insistir, e o mundo Perl está<br>
&gt;&gt; &gt;&gt; cheio de alternativas bacanas para outros meios de pensar, como o<br>
&gt;&gt; &gt;&gt; Mojolicious e o Dancer.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; O desempenho de soluções web depende muito da infraestrutura por<br>
&gt;&gt; &gt;&gt; baixo. Se vc vem de Rails, sabe que um bom hardware faz toda a<br>
&gt;&gt; &gt;&gt; diferença, que o grande gargalo é o banco, e que muitas vezes sai mais<br>
&gt;&gt; &gt;&gt; em conta pagar por uma melhoria na infra do que pagar um ou mais devs<br>
&gt;&gt; &gt;&gt; pra otimizar o código. Dito isso, sim, as facilidades oferecidas pelo<br>
&gt;&gt; &gt;&gt; Catalyst compensam e muito o overhead que ele causa, ainda mais<br>
&gt;&gt; &gt;&gt; rodando em cima de um fastcgi.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Ao contrário de muitas soluções, o Catalyst não coloca propaganda em<br>
&gt;&gt; &gt;&gt; headers ou coisa que o valha, então é difícil listar sites com ele a<br>
&gt;&gt; &gt;&gt; menos que o dev procure a comunidade e avise. Se vc quer um exemplo de<br>
&gt;&gt; &gt;&gt; &quot;projetos que já usam Catalyst em ambiente de grande demanda de<br>
&gt;&gt; &gt;&gt; acessos simultânos&quot;, um bom exemplo é o YouPorn[<a href="http://www.youporn.com" target="_blank">http://www.youporn.com</a><br>
&gt;&gt; &gt;&gt; - NSFW], que circula entre os 50 sites mais visitados do mundo. O<br>
&gt;&gt; &gt;&gt; iPlayer da BBC não é muito conhecido aqui no Brasil, mas também é de<br>
&gt;&gt; &gt;&gt; altíssimo tráfego.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Espero ter ajudado. Se sobrou alguma dúvida, tamos aí pra isso :-)<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; []s<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; -b<br>
&gt;&gt; &gt;&gt; =begin disclaimer<br>
&gt;&gt; &gt;&gt;   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
&gt;&gt; &gt;&gt;  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
&gt;&gt; &gt;&gt;  L&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<br>
&gt;&gt; &gt;&gt; =end disclaimer<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Rogerio Ferreira<br>
&gt;&gt; &gt; <a href="http://rogerioferreira.objectis.net" target="_blank">http://rogerioferreira.objectis.net</a><br>
&gt;&gt; &gt; <a href="http://www.howtoday.com.br" target="_blank">http://www.howtoday.com.br</a><br>
&gt;&gt; &gt; <a href="http://events.linuxfoundation.org/events/linuxcon-brazil/schedule" target="_blank">http://events.linuxfoundation.org/events/linuxcon-brazil/schedule</a><br>
&gt;&gt; &gt; <a href="http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf" target="_blank">http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf</a><br>
&gt;&gt; &gt; Fone: (11) 9424-0419<br>
&gt;&gt; &gt; --------------------------------------------------------<br>
&gt;&gt; &gt; LPI 302 (Mixed Environment) Specialty<br>
&gt;&gt; &gt; Senior Level Linux Professional (LPIC-3)<br>
&gt;&gt; &gt; Advanced Level Linux Professional (LPIC-2)<br>
&gt;&gt; &gt; Junior Level Linux Professional (LPIC-1)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; =begin disclaimer<br>
&gt;&gt; &gt;   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
&gt;&gt; &gt;  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
&gt;&gt; &gt;  L&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<br>
&gt;&gt; &gt; =end disclaimer<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; =begin disclaimer<br>
&gt;&gt;   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
&gt;&gt;  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
&gt;&gt;  L&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<br>
&gt;&gt; =end disclaimer<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Rogerio Ferreira<br>
&gt; <a href="http://rogerioferreira.objectis.net" target="_blank">http://rogerioferreira.objectis.net</a><br>
&gt; <a href="http://www.howtoday.com.br" target="_blank">http://www.howtoday.com.br</a><br>
&gt; <a href="http://events.linuxfoundation.org/events/linuxcon-brazil/schedule" target="_blank">http://events.linuxfoundation.org/events/linuxcon-brazil/schedule</a><br>
&gt; <a href="http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf" target="_blank">http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf</a><br>
&gt; Fone: (11) 9424-0419<br>
&gt; --------------------------------------------------------<br>
&gt; LPI 302 (Mixed Environment) Specialty<br>
&gt; Senior Level Linux Professional (LPIC-3)<br>
&gt; Advanced Level Linux Professional (LPIC-2)<br>
&gt; Junior Level Linux Professional (LPIC-1)<br>
&gt;<br>
&gt; =begin disclaimer<br>
&gt;   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
&gt;  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
&gt;  L&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<br>
&gt; =end disclaimer<br>
&gt;<br>
&gt;<br>
=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L&lt;<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>&gt;<br>
=end disclaimer<br>
</div></div></blockquote></div><br>