Evitando Oversights comuns em Perl

Entrando um erro de digitação ou dois durante o curso de escrever um programa Perl não é incomum. Mas quando você tenta executar um programa que contém um texto de entrada de deslize, Perl normalmente torna-se confuso e diz-lhe assim por relatar um erro. A reação natural para a maioria das pessoas, mesmo aqueles com anos de experiência em programação, é a ficar preocupado ou com raiva ou ambos, quando uma mensagem de erro aparece.

Não entre em pânico. Respirar fundo. Tome outra respiração lenta e profunda. Sério, você não pode chegar à raiz do problema se você é tudo tenso e incomodado. Não importa quantos anos você programa, você sempre acaba encontrando alguns erros no código que está escrito.

Então, agora que você é (espero!) Um pouco mais calmo, você pode começar a apreciar o fato de que o Perl tem mensagens de erro mais votos do que quase qualquer outra linguagem de programação. As mensagens não são sempre certo sobre o dinheiro, mas eles podem chegar muito perto do local onde reside o problema com a pesquisa mínimo de sua parte.

Perl tem uma miríade de mensagens de erro, mas alguns certamente surgir mais do que outros devido a alguns erros comuns que todo mundo parece fazer. Os seguintes erros resultam de goofs menores de entrada de texto que você pode facilmente evitar.

Esquecendo um ponto e vírgula

Provavelmente, a mensagem de erro mais comum que você vê ao programar em Perl é algo como isto:

# Erro de sintaxe, perto de "aberto"
File 'counter1.pl'- Linha 10
# Execução abortada devido a erros de compilação.

Você pode olhar e olhar para a linha 10, aquele com a declaração aberta, e você não vai ver nada de errado com ele. O truque aqui é examinar a declaração que vem antes a declaração aberta e ver se ele termina com um ponto e vírgula. (Perl sabe que uma declaração só termina quando encontra um ponto e vírgula.) Neste caso, o erro é causado por um ponto e vírgula em falta no fim da linha 7 do programa:

$ TheFile = "sample.txt"

O esquecimento de uma aspa

O seguinte tipo de mensagem de erro pode ser extremamente frustrante se você não sabe de uma solução rápida:

# Palavra nua encontrada onde o operador espera, perto
# "Open (INFILE, $ TheFile) ou morrer" A "
# (Pode ser um multi-line runaway "" string a partir de
# Linha 7)
File 'counter1.pl'- Linha 10

Este erro é semelhante ao esquecimento de um ponto e vírgula em vez disso, é uma aspa que é omitido acidentalmente:

$ TheFile = "sample.txt;

Neste caso, Perl fez um bom trabalho de adivinhar o que é errado, o que sugere que um multi-line runaway "" string na linha 7 é o problema, que é precisamente certo.

Digitando um parêntese muitos ou poucos

Quando você tem um monte de abrir e fechar parênteses em um programa, é fácil escorregar um extra por acidente. Se for esse o caso, você pode ver uma mensagem de Perl que lê algo como isto:

# Erro de sintaxe, perto ") eq"
File 'counter1.pl'- Linha 38
# Erro de sintaxe, perto de "}"
File 'counter1.pl'- Linha 42

Aqui, Perl não pode determinar onde o erro é exatamente, mas ele realmente deu certo na primeira suposição: Linha 38 contém um parêntese extra de direita:

if (substr ($ TheLine, $ CharPos, 1)) eq "")

Ter um parêntese muito poucos em um programa Perl pode causar mais difícil de encontrar problemas:

# Não é possível usar produto constante como arg esquerda implícita --->,
# Próximo "1}"
File 'counter1.pl'- Linha 39
# Scalar encontrada onde o operador espera, perto de "$ CharPos"
File 'counter1.pl'- Linha 40
# (Falta vírgula na linha anterior?)
# Erro de sintaxe, perto de "$ CharPos"
File 'counter1.pl'- Linha 40

Yarp! Tudo isso foi produzido porque o último parêntese na Linha 38 está em falta:

if (substr ($ TheLine, $ CharPos, 1) eq ""

Aqui é outra boa lição em caçar erros de digitação: Comece onde Perl diz que encontrou um erro. Se você não encontrar o erro lá, vá até uma linha ou dois e ver se o problema começou mais cedo.

Uma palavra de conselho final: Trust Perl para encontrar os erros simples para você (onde se pode), e lembre-se que ele está dando-lhe toda a ajuda que puder, que é mais do que você pode dizer para muitas linguagens de programação.

menu