<div>[Perl 5 - Básico] #3 Estrito e Cuidadoso</div><div> A linguagem Perl foi propositalmente projetada para servir tanto a</div><div> programadores experientes quanto a iniciantes. Esta flexibilidade veio</div><div>
ao longo de anos de desenvolvimento. As práticas da linguagem mudaram</div><div> junto com a mudança de hábitos de seus programadores.</div><div><br></div><div> Uma destas práticas para se ter em mente logo ao iniciar o aprendizado</div>
<div> de Perl é: sempre coloque no início de seus programas os comandos:</div><div><br></div><div> use strict;</div><div> use warnings;</div><div><br></div><div> Por quê? Porque em seu modo *default*, Perl é extremamente complacente</div>
<div> e compatível com a programação de anos atrás. Estes comandos ativam</div><div> uma série de checagens que ajudam iniciantes e quaisquer outros tipos</div><div> de programadores a seguir confiantes escrevendo programas Perl de</div>
<div> qualquer tamanho.</div><div><br></div><div> Sem "strict", muitas coisas surpreendentes podem acontecer: variáveis</div><div> ganham vida automaticamente (quer você queira ou não)</div><div><br></div>
<div> $count++;</div><div><br></div><div> vai automaticamente trazer a variável $count à vida e o incremento vai</div><div> passar o seu valor inicial de "undef" (que é 0 do ponto de vista</div><div>
numérico) para 1.</div><div><br></div><div> O grande problema com esta capacidade é que estas variáveis surgidas</div><div> do nada podem ter o mesmo nome que outras que ocorrem em outros pontos</div><div> do programa. O pior é que elas serão as mesmas porque vão</div>
<div> compartilhar o mesmo espaço.</div><div><br></div><div> Outro problema comum são erros de digitação, que podem demorar para</div><div> ser percebidos e levar a *bugs* difíceis de encontrar. Por exemplo, se</div>
<div> em um pedaço razoavelmente longo de código, você se refere a $cont</div><div> quando queria dizer $count e o Perl fica quieto (porque você deve saber</div><div> o que está fazendo).</div><div><br></div><div>
Com "use strict", as coisas são diferentes:</div><div><br></div><div> $count++</div><div><br></div><div> leva ao erro</div><div><br></div><div> Global symbol "$count" requires explicit package name</div>
<div> [Símbolo global "$count" requer nome de pacote explícito]</div><div><br></div><div> O uso correto é tornar a variável local ao escopo onde ela precisa</div><div> existir com uma declaração "my":</div>
<div><br></div><div> my $count;</div><div> ...</div><div> $count++;</div><div><br></div><div> Sem "warnings", algumas situações suspeitas passam sem chamar</div><div> atenção. Por exemplo,</div>
<div><br></div><div> my $count = 'a';</div><div> $count += 1;</div><div><br></div><div> converte o string 'a' silenciosamente para 0 e incrementa o valor da</div><div> variável $count para 1. Provavelmente, não é esta a intenção do</div>
<div> programador.</div><div><br></div><div> Com "use warnings", a seguinte mensagem vai para "STDERR":</div><div><br></div><div> Argument "a" isn't numeric in addition (+)</div>
<div> [O argumento "a" não é numérico na adição (+)]</div><div><br></div><div> Note que *warnings* não interrompem o programa, como os erros de</div><div> verdade gerados por "strict". A mensagem é enviada para o "arquivo" de</div>
<div> erros, gerando ruído inesperado na saída do programa. O programador,</div><div> que deve estar sempre atento a estas mensagens porque indicam erros em</div><div> potencial, deve encontrar a sua fonte e tratar de entender e</div>
<div> provavelmente consertar a sua causa.</div><div><br></div><div> Há muito mais em "use strict" e "use warnings". Mas a recomendação</div><div> básica é use sempre. Hoje apenas código muito exótico do núcleo do</div>
<div> interpretador Perl ousa omitir estas diretivas. (E mesmo em alguns</div><div> destes casos, eles foram testados com estas diretivas ligadas e então</div><div> desativadas para evitar problemas de compatibilidade com programas</div>
<div> antigos e questões de desempenho.)</div><div><br></div><div> Programar em Perl sem "strict" e "warnings" é como andar na corda bamba</div><div> sem corda de segurança. É possível mas exige concentração contínua</div>
<div> e os efeitos de um engano podem ser inconvenientes no mínimo.</div><div><br></div><div> Triangulo-pm, 2008-06-12 10:00</div><div><br></div>