<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>2006 Perl Advent Calendar: Você é bonzinho ou malvado?</title>
<link rel="stylesheet" href="http://perladvent.pm.org/2006/style.css" type="text/css">
</head>

<body>
<h1><a href="http://perladvent.pm.org/2006/">Perl Advent Calendar 2006-12</a>-04</h1>
<h2 align="center">Você é bonzinho ou malvado?</h2>
<h3 align="center">por Jerrad Pierce</h3>
<p>
Como comumente acontece com sistemas de <em>template</em>, muitos tentam 
implementar o seu próprio processador de parâmetros para CGI. Contudo, no 
momento em que a idéia da implementação desta <em>gambiarra</em> surgisse
ela seria confrontada com pedidos desesperados para que você "use <tt>CGI</tt>!"
Muitas vezes (descontados os casos de pura ignorância) essas soluções "caseiras"
surgem a partir de um desejo de evitar todo o peso do módulo <tt>CGI</tt>.
E se você realmente não precisar de todos os seus recursos? Talvez você tenha
decidido tentar sair da "lista de malvados" de alguem e está usando algo como o módulo
<tt><a href="http://search.cpan.org/search?module=HTML::Template">HTML::Template</a></tt>,
fazendo com que todos os métodos de geração de HTML do módulo <tt>CGI</tt> sejam 
dispensáveis. Neste caso, talvez você esteja interessado no elegante módulo
<tt><a href="http://search.cpan.org/search?module=CGI::Minimal">CGI::Minimal</a></tt>.
Dependendo do seu método de medida, o módulo <tt>CGI::Minimal</tt> possui
<sup>1</sup>/<sub>6</sub> das linhas e <sup>1</sup>/<sub>9</sub> dos bytes que
constituem o módulo <tt>CGI</tt>. O resultado, de acordo com os (antigos) 
<em>benchmarks</em> incluído na documentação é um ganho de velocidade de 4x 
para scripts CGIs convencionais. E, como o nosso simples exemplo <tt>cgiecho</tt>
mostra <sup><a href="#1">1</a></sup>, a interface do módulo é familiar o 
suficiente. Então vá em frente e dê uma experimentada, o que você tem a perder?
</p>

<h1><a href="http://perladvent.pm.org/2006/4/mod4.pl">mod4.pl</a></h1>
<hr>
<pre>   1 #Be sure to use -T and maybe <a href="http://perladvent.pm.org/2003/1st/">CGI::Untaint</a> if you do anything more substantial
   2 <span class="k">use</span> <span class="w">CGI::Minimal</span><span class="sc">;</span>
   3 <span class="k">use</span> <span class="w">Data::Dumper</span><span class="sc">;</span>
   4 
   5 <span class="k">my</span><span class="s">(</span><span class="i">$q</span><span class="cm">,</span> <span class="i">%p</span><span class="s">)</span><span class="sc">;</span>
   6 
   7 <span class="i">$q</span> = <span class="w">new</span> <span class="w">CGI::Minimal</span><span class="sc">;</span>
   8 <span class="i">$p</span>{<span class="i">$_</span>} = <span class="i">$q</span><span class="i">-&gt;param</span><span class="s">(</span><span class="i">$_</span><span class="s">)</span> <span class="k">foreach</span> <span class="i">$q</span><span class="i">-&gt;param</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
   9 
  10 <span class="k">print</span> <span class="q">"Content-type: text/plain\n\n"</span><span class="sc">;</span>
  11 
  12 <span class="i">$Data::Dumper::Sortkeys</span> =<span class="n">1</span> <span class="sc">;</span>
  13 <span class="k">print</span> <span class="i">Data::Dumper::Dumper</span> \<span class="i">%p</span><span class="sc">;</span>
</pre>
<h2>Veja também</h2>
O módulo <a href="http://search.cpan.org/search?module=CGI::Simple">CGI::Simple</a>
para uma solução intermediária entre o <tt>CGI</tt> convencional e o <tt>CGI::Minimal</tt>.
<p><a name="1">1</a>. Nenhum sistema de <em>template</em> foi utilizado pois seria algo além do escopo do exemplo.</p>

<blockquote style="padding: 1em; border: 2px ridge black; background-color:#eee; text-align: center">
<i>Traduzido por Nilson Santos Figueiredo Júnior.</i>
</blockquote>

</body></html>