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

Adriano Ferreira aferreira em shopzilla.com
Quinta Junho 12 06:07:29 PDT 2008


[Perl - 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


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