Non credo che questo messaggio d'errore sia molto comune in Perl. O, quanto meno, non ricordo di averlo visto prima di inciamparci durante una lezione di Perl che ho tenuto recentemente.
Unknown warnings category '1'
Il messaggio d'errore completo era qualcosa come:
Unknown warnings category '1' at hello_world.pl line 4
BEGIN failed--compilation aborted at hello_world.pl line 4.
Hello World
Un messaggio piuttosto inquietante, specialmente perché il codice era davvero semplicissimo:
use strict;
use warnings
print "Hello World";
Ho passato un bel po' di tempo a guardare il codice senza trovare alcun problema. Tra l'altro, come vedete, la stringa "Hello World" veniva stampata correttamente.
Sono rimasto spiazzato, e mi ci è voluto un certo tempo per accorgermi di ciò che probabilmente avete già notato:
Il problema è che manca il punto e virgola dopo l'istruzione
use warnings
. Perl esegue l'istruzione print,
la stringa viene stampata e la funzione print
restituisce 1
per indicare che ha avuto successo.
Perl crede che io abbia scritto use warnings 1
.
Ci sono molte categorie di warning, ma nessuna do loro si chiama "1".
Unknown warnings category 'Foo'
Ecco un altro caso dello stesso problema.
Il messaggio d'errore è il seguente:
Unknown warnings category 'Foo' at hello.pl line 4
BEGIN failed--compilation aborted at hello.pl line 4.
e il codice di esempio illustra il funzionamento dell'interpolazione di stringhe. Questo è solitamente il secondo esempio che faccio, subito dopo "Hello World".
use strict;
use warnings
my $name = "Foo";
print "Hi $name\n";
Manca il punto e virgola
Naturalmente, quelli discussi sopra sono semplicemente casi speciali del problema più generale di dimenticare un punto e virgola. Perl se ne accorge soltanto all'istruzione succesiva.
Può essere una buona idea, in generale, controllare la linea precedente a quella indicata nel messaggio d'errore. Potrebbe mancare il punto e virgola.