[Triangulo-pm] [Perl 5 - Básico] #3 Estrito e Cuidadoso

Adriano Ferreira a.r.ferreira em gmail.com
Domingo Agosto 2 09:10:54 PDT 2009


[Perl 5 - Básico] #3 Estrito e Cuidadoso
    A linguagem Perl foi propositalmente projetada para servir tanto a
    programadores experientes quanto a iniciantes. Esta flexibilidade veio
    ao longo de anos de desenvolvimento. As práticas da linguagem mudaram
    junto com a mudança de hábitos de seus programadores.

    Uma destas práticas para se ter em mente logo ao iniciar o aprendizado
    de Perl é: sempre coloque no início de seus programas os comandos:

        use strict;
        use warnings;

    Por quê? Porque em seu modo *default*, Perl é extremamente complacente
    e compatível com a programação de anos atrás. Estes comandos ativam
    uma série de checagens que ajudam iniciantes e quaisquer outros tipos
    de programadores a seguir confiantes escrevendo programas Perl de
    qualquer tamanho.

    Sem "strict", muitas coisas surpreendentes podem acontecer: variáveis
    ganham vida automaticamente (quer você queira ou não)

        $count++;

    vai automaticamente trazer a variável $count à vida e o incremento vai
    passar o seu valor inicial de "undef" (que é 0 do ponto de vista
    numérico) para 1.

    O grande problema com esta capacidade é que estas variáveis surgidas
    do nada podem ter o mesmo nome que outras que ocorrem em outros pontos
    do programa. O pior é que elas serão as mesmas porque vão
    compartilhar o mesmo espaço.

    Outro problema comum são erros de digitação, que podem demorar para
    ser percebidos e levar a *bugs* difíceis de encontrar. Por exemplo, se
    em um pedaço razoavelmente longo de código, você se refere a $cont
    quando queria dizer $count e o Perl fica quieto (porque você deve saber
    o que está fazendo).

    Com "use strict", as coisas são diferentes:

        $count++

    leva ao erro

        Global symbol "$count" requires explicit package name
        [Símbolo global "$count" requer nome de pacote explícito]

    O uso correto é tornar a variável local ao escopo onde ela precisa
    existir com uma declaração "my":

        my $count;
        ...
        $count++;

    Sem "warnings", algumas situações suspeitas passam sem chamar
    atenção. Por exemplo,

        my $count = 'a';
        $count += 1;

    converte o string 'a' silenciosamente para 0 e incrementa o valor da
    variável $count para 1. Provavelmente, não é esta a intenção do
    programador.

    Com "use warnings", a seguinte mensagem vai para "STDERR":

        Argument "a" isn't numeric in addition (+)
        [O argumento "a" não é numérico na adição (+)]

    Note que *warnings* não interrompem o programa, como os erros de
    verdade gerados por "strict". A mensagem é enviada para o "arquivo" de
    erros, gerando ruído inesperado na saída do programa. O programador,
    que deve estar sempre atento a estas mensagens porque indicam erros em
    potencial, deve encontrar a sua fonte e tratar de entender e
    provavelmente consertar a sua causa.

    Há muito mais em "use strict" e "use warnings". Mas a recomendação
    básica é use sempre. Hoje apenas código muito exótico do núcleo do
    interpretador Perl ousa omitir estas diretivas. (E mesmo em alguns
    destes casos, eles foram testados com estas diretivas ligadas e então
    desativadas para evitar problemas de compatibilidade com programas
    antigos e questões de desempenho.)

    Programar em Perl sem "strict" e "warnings" é como andar na corda bamba
    sem corda de segurança. É possível mas exige concentração contínua
    e os efeitos de um engano podem ser inconvenientes no mínimo.

        Triangulo-pm, 2008-06-12 10:00
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/triangulo-pm/attachments/20090802/cfab407c/attachment.html>


Mais detalhes sobre a lista de discussão Triangulo-pm