<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 &quot;strict&quot;, 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 &quot;undef&quot; (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 &quot;use strict&quot;, 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 &quot;$count&quot; requires explicit package name</div>
<div>        [Símbolo global &quot;$count&quot; 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 &quot;my&quot;:</div>
<div><br></div><div>        my $count;</div><div>        ...</div><div>        $count++;</div><div><br></div><div>    Sem &quot;warnings&quot;, algumas situações suspeitas passam sem chamar</div><div>    atenção. Por exemplo,</div>
<div><br></div><div>        my $count = &#39;a&#39;;</div><div>        $count += 1;</div><div><br></div><div>    converte o string &#39;a&#39; 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 &quot;use warnings&quot;, a seguinte mensagem vai para &quot;STDERR&quot;:</div><div><br></div><div>        Argument &quot;a&quot; isn&#39;t numeric in addition (+)</div>
<div>        [O argumento &quot;a&quot; 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 &quot;strict&quot;. A mensagem é enviada para o &quot;arquivo&quot; 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 &quot;use strict&quot; e &quot;use warnings&quot;. 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 &quot;strict&quot; e &quot;warnings&quot; é 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>