Categoria de alertas desconhecida

; alertas

Não acho que essa seja uma mensagem de erro comum em Perl. Pelo menos não me lembro de tê-la visto antes, mas recentemente ela me pegou durante um treinamento em Perl.

Categoria de alertas desconhecida '1'

A mensagem de erro toda parecia-se com essa:

Unknown warnings category '1' at ola_mundo.pl line 4
BEGIN failed--compilation aborted at ola_mundo.pl line 4.
(Categoria de alertas desconhecida '1' em ola_mundo.pl linha 4
BEGIN falhado--compilação abortada em ola_mundo.pl linha 4)
Olá, mundo!

Isso foi muito perturbador, principalmente porque o código era muito simples:

use strict;
use warnings

print "Olá, mundo!";

Prestei bastante atenção e não vi nenhum problema no código. Como você pode ver, ele imprimiu "Olá, mundo!".

Isso me pegou de jeito, e levou bastante tempo para eu notar o que você provavelmente já notou:

o problema é a falta do ponto-e-vírgula depois do comando use warnings. Enquanto perl executa o comando print, ele imprime a cadeia de caracteres, e a função print retorna 1 indicando que foi bem-sucedida.

Perl pensa que escrevi use warnings 1.

Há muitas categorias de alertas, mas nenhuma delas é chamada de "1".

Categoria desconhecida 'Zé' de alertas

Este é outro caso do mesmo problema.

A mensagem de erro se parece com essa:

Unknown warnings category 'Zé' at ola.pl line 4
BEGIN failed--compilation aborted at ola.pl line 4.
(Categoria desconhecida 'Zé' de alertas em ola.pl linha 4
BEGIN falhado--compilação abortada em ola.pl linha 4.)

e o código de exemplo está mostrando como a interpolação em cadeias de caracteres funciona. Este é, pode-se dizer, o segundo exemplo que ensino, logo depois do "Olá, mundo".

use strict;
use warnings

my $name = "Zé";
print "Hi $name\n";

Ponto-e-vírgula faltando

É claro que esses são apenas casos especiais do problema genérico de esquecer um ponto-e-vírgula. Perl só consegue perceber isso no comando seguinte.

É geralmente uma boa ideia checar a linha imediatamente anterior ao lugar indicado na mensagem de erro. Talvez lá esteja faltando um ponto-e-vírgula.

Otras páginas

Perl tutorial

Author

Gabor Szabo (szabgab) Gabor Szabo