Programação WEB com Perl

Ednardo dos Santos Lobo
Publicado em 19/08/2006

r2 - 19 Aug 2006 - JoenioCosta

Programação WEB com Perl

Hoje em dia, com a popularização da WEB, mesmo que de forma desigual e discriminatória, grande parte dos esforços de desenvolvimento de aplicações/sistemas computacionais voltaram-se para o ambiente WEB. Sendo assim, é natural o surgimento de diversas linguagens e ferramentas com essa finalidade. A Perl, devido sua flexibilidade e capacidade para manipulação de arquivos texto, tem se monstrado bastante eficiente na geração dinâmica de arquivos texto formatados, como é o caso dos arquivos HTML, que com seu conjunto de marcadores tem sido desde o princípio, o principal meio para a publicação de conteúdo na WEB.

Esse artigo pretende analisar alguns dos paradigmas de programação utilizados no desenvolvimento de aplicações/sistemas para WEB, apontar as vantagens e desvantagens de cada um e, finalmente, fazer a apresentação de duas bibliotecas ou módulos, como é mais conhecido pelos programadores da linguagem PERL. Módulos estes, voltados para a programação WEB que adota o paradigma de separar a codificação da marcação.

1. Paradigmas

Independentemente da linguagem utilizada na programação de uma aplicação WEB convencional (aquela cujo o objetivo é gerar hipertexto dinâmicamente), existem três paradigmas que podem ser adotados para tal fim: um, inserir os marcadores do hipertexto dentro do código; dois, inserir o código dentro do hipertexto e três, não misturar o hipertexto com a codificação.

Das três abordagens, a última é a menos aplicada e por mais estranho que possa parecer, dentre os três paradigmas discutidos nesse artigo, esta é a abordagem que possui mais vantagens do que desvantagens. Analise os exemplos abaixo e começará perceber por que ela é mais vantagosa.

* código com marcações
   #!/usr/bin/perl
   use strict;

   $titulo = 'Minha index.t Page';
   $autor = 'Jose Maria';
   $data = scalar localtime;

   print "Content-Type: text/html;\n\n";
   print <<EOF;
       
           
      
          $titulo
      
           

           
      

$titulo

$autor (#) $data EOF exit 0;
* Marcações com código (exemplicando com Embperl)
   [-
       $titulo = 'Minha index.t Page';
       $autor = 'Jose Maria';
       $data = date ("l dS of F Y h:i:s A");
   -]
   
       
           
               [+ $titulo +]
           
       

       
           

[+ $titulo +]

[+ $autor +] (#) [+ $data +]
* Código e marcações separados (exemplificando com HTML::Template)
   #!/usr/bin/perl
   use strict;
   use HTML::Template;

   my $t = HTML::Template->new(filename=>'teste.tmpl');

   $t->param(titulo=>'Minha index.t Page');
   $t->param(autor=>'Jose Maria');
   $t->param(data=>scalar localtime);

   print "Content-Type: text/html;\n\n";
   print $t->output;

* MARCAÇÕES (teste.tmpl)
   
       
           
               <TMPL_VAR titulo>
           
       

       
           

(#)

1.1. PARADIGMA 1: Código com marcações

Essa é a mais convencional e tradicional de todas as abordagens e não difere muito da programação normal a que todo programador está habituado. Sua vantagem, é não exigir do programador nenhum conhecimento extra, fora o entendimento de como a aplicação é processada no servidor WEB e apresentada pelo navegador. A desvantagem, é que o código, com todos os marcadores em meio a ele, ficará sujo e pouco legível, o que dificultará bastante a manutenção. E mesmo sendo uma manutenção simples, que exiga apenas alterações visuais (nas marcações) não poderá ser feita por uma pessoa especializada únicamente na linguagem de marcação.

1.2. PARADIGMA 2: Marcações com código

O suprimento imediato de uma necessidade muitas vezes pesa bastante na escolha por esse ou aquele paradigma. Quando se tem, por exemplo, uma página HTML completamente estática e surge a necessidade de adicionar informações dinâmicas a ela, o caminho mais curto é inserir em meio as marcações trechos de código que irão gerar ou obter essas informações de algum lugar. E essa, é uma das vantagens dessa abordagem, praticidade (nessa situação). Por outro lado, para projetos grandes esse tipo de codificação é pouco eficiente, pois como na abordagem anterior (Paradigma 1), em todas as fases de construção da aplicação e nas manutenções, será necessário pessoas com conhecimento tanto de linguagem de programação quanto de marcação. Além disso, devido ao fato do código e as marcação estarem juntos, tal abordagem irá exigir um esforço extra por parte dos programadores, que passarão a ter que se preocupar não só com a depuração da codificação, mas também com a das marcações.

1.3. PARADIGMA 3: Código e (separadamente) marcações

Manter código e marcação separados, pelo que já foi exposto, é algo sensato de ser feito. E é justamente essa a abordagem desse terceiro paradigma. Os programadores continuarão codificando seus códigos como habitualmente o fazem e os profissionais resposáveis pela formatação de hipertexto poderão continuar preocupando-se única e exclusivamente com a apresentação. Essa divisão de tarefas, é bastante produtiva e eficiente, pois não exige esforços extras de nenhuma das partes, somente um pouco de entrosamento e compromisso entre ambas. As partes trabalharão quase que independentemente, uma não interferindo no que diz respeito a outra. Modificações na aplicação relacionadas a apresentação (marcações), na maior parte das vezes, não exigirá alterações também na codificação e vice-versa. É nesse sentindo que este artigo quer demonstrar que esta abordagem possui mais vantagens do que desvantagens em relação às duas anteriores, entretanto, cada aplicação é um caso diferenciado, igualmente diferente, cada pessoa que a constrói e suas necessidades.

2. O módulo HTML::Template

Esse módulo, já exemplificado neste artigo, é a ferramenta mais interessante para a adoção do paradigma 3 no desenvolvimento de aplicações WEB. Ele basea-se na utilização de "Templates" (ex.: um hipertexto estático) com alguns marcadores especiais que serão substituidos pela informação dinâmica gerada ou obtida pelo CGI da aplicação WEB. Esse conjunto de marcadores especiais são semelhantes aos marcadores do hipertexto e a primeira vista, podem até se confundir com estes. Abaixo relaciono todos eles:

   

    [  ] 

    [  ] 

   

   

OBS: O termo 'NAME=' dos marcadores acima é opcional, tendo sido omitido do exemplo mostrado no início deste artigo.

O marcador será substituido pelo contéudo do parâmetro do tipo "hash", inicializado através do método "$obj->param()". Por sua vez, os marcadores e irão avaliar logicamente o conteúdo de um de parâmetro. Já o marcador , é um pouco diferenciado. Ele irá avaliar um parâmetro do tipo "array" e realizará tantas interações (loops) quanto forem os elementos deste "array". Cada elemento deverá ser um "hash" cujo os valores serão colocados no lugar dos marcadores correspondentes, no interior de . E finalmente, o marcador será substituido pelo conteúdo do arquivo que ele referencia.

Abaixo um exemplo bastante ilustrativo de como aplicar esses marcadores:

   #!/usr/bin/perl
   #---------------------------------------------------------------#
   ## Exemplo de um programa utilizando HTML::Template             #
   #---------------------------------------------------------------#

   use strict;
   use HTML::Template

   my $t = HTML::Template->new(filename=>'exemplo.tmpl');

   $t->param(nome => 'Revista Eletronica');
   $t->param(edicao => '1');
   $t->param(artigos => [
       {
           artigo => 'Artigo 1',
           autor => 'Jose',
           nivel => 0,
       },
       {
           artigo => 'Artigo 2',
           autor => 'Maria',
           nivel => 1,
       },
       {
           artigo => 'Artigo 3',
           autor => 'Pedro',
           nivel => 2,
        }]
   );

   print "Content-Type: text/html;\n\n";
   print $t->output;







    

    
        
            
                <TMPL_VAR nome>
            
        

        
            

, edicao

Avancado Iniciante

3. O módulo EL::cgi

Esse módulo, desenvolvido pelo autor deste artigo, é apenas um, de uma série de outros módulos que objetivam tornar a programação de aplicações WEB mais rápida, eficiente e organizada, seguindo a abordagem de implementação com código e marcações em separado. Basicamente, esse módulo e os demais da série "EL *", são uma abstratação de outros módulos (ex.: HTML Template, DBI, Apache::Session, etc.) de forma consistente e integrada, o que facilita o entendimento do funcionamento e a utilização dos mesmos. Veja a referência bibliográfica para mais detalhes sobre esses módulos. No exemplo abaixo, é dada uma noção bem básica de como ele funciona.

   #---------------------------------------------------------------#
   ## calc.pl                                                      #
   #---------------------------------------------------------------#

   use strict;
   use EL::cgi;

   my $cgi = EL::cgi->new;

   my %h = (
       op1 => {
           dsc => 'Operator 1',
           rex => '\d+',
           msg => 'Type any number !!',
       }
       ope => {
           dsc => 'Operation',
           rex => '[+-*/]',
           msg => 'Operation are "+", "-", "*", "/"',
       }
       ope2 => {
           dsc => 'Operator 2',
           rex => '\d+',
           msg => 'Type any number',
       }
   );

   if ($cgi->valid(\%h)) {
       my $r = eval '$r = ' $cgi->get('op1') .
                            $cgi->get('ope') .
                            $cgi->get('op2');
       $cgi->set('result',$r);
   }

   $cgi->out('calc.tmpl');







   <-- -- calc.tmpl>

   
=

4. Bibliografia

* Online

* Título: EmbPerl
* Descrição: Framework para contrução de aplicações WEB com o código embutido nas marcações.
  • * Título: HTML::Template
    * Descrição: Módulo que permite separar o código das marcações.
  • * Título: EL::cgi
    * Descrição: Módulo para construção de aplicações WEB baseado no paradigma 3.

----

AUTHOR

Ednardo dos Santos Lobo

blog comments powered by Disqus