我觉得这种错误信息在Perl里并不是经常遇到。至少我不记得此前见到过。 但在最近一个Perl培训课程中,它却给我上了一课。

Unknown warnings category '1'

完整的错误信息类似下边这样:

Unknown warnings category '1' at hello_world.pl line 4
BEGIN failed--compilation aborted at hello_world.pl line 4.
Hello World

这个错误比较烦人,尤其是代码非常简单时:

use strict;
use warnings

print "Hello World";

我盯着这段代码看了很久,没发现任何问题。 如你所见,它已经打印出来了字符串"Hello World"。

它令我倍受挫折,花了我相当长的时间才发现问题,可能你已经发现了:

问题在于use warnings语句之后少了个分号。Perl执行打印语句,它打印出来字符串的同时,print函数返回1表明执行成功。

Perl就认为我写了use warnings 1

警告类型有很多,但是没有一个叫做"1"。

Unknown warnings category 'Foo'

这是同类问题的另一个例子。

错误信息类似:

Unknown warnings category 'Foo' at hello.pl line 4
BEGIN failed--compilation aborted at hello.pl line 4.

示例代码展示了字符串插值怎么工作。这是我在"Hello World"之后教的第二个例子。

use strict;
use warnings

my $name = "Foo";
print "Hi $name\n";

遗漏分号

当然,这只是由于遗漏分号引发的常见问题其中的特例。Perl只能在下一个语句处发现它。

通常检查一下错误信息提示行的上一行是个好办法。或许只是丢了个分号。