15

下面两个开始 Perl 脚本的例子有区别吗?如果是这样,我什么时候会使用其中一个?

示例 1:

#!/usr/bin/perl

use warnings;

示例 2:

#!/usr/bin/perl -w
4

5 回答 5

31

使用该开关将启用程序使用的所有模块中的所有警告。使用编译指示,您只能在该特定模块(或脚本)中启用它。理想情况下,您在所有模块中都使用警告,但通常情况并非如此。当您使用不是警告安全的第三方模块时,使用该开关可能会收到很多警告。

因此,理想情况下,这并不重要,但实际上,您的最终用户通常最好不要使用 switch,而是使用 pragma。

于 2008-10-21T13:44:22.730 回答
17

命令行开关为整个-w解释器全局打开警告。另一方面,use warnings是“词法杂注”,仅适用于使用它的词法范围。通常,您将它放在文件的顶部,以便它适用于整个文件,但您也可以将其范围限定为特定的块。此外,您可以使用no warnings在块内临时关闭它们,以防您需要执行其他会产生警告的行为。如果你坚持下去,你就不能这样做-w

有关词法警告如何工作的详细信息,包括如何打开和关闭它们的各种子集,请参阅perllexwarn文档。

于 2008-10-21T14:25:13.160 回答
10

“-w”较旧,曾经是打开警告的唯一方法(实际上“-w”只是启用全局 $^W 变量)。“使用警告;” 现在更可取(从 5.6.0 及更高版本开始),因为(如前所述)它具有词法而不是全局范围,并且您可以打开/关闭特定警告。并且不要忘记以“use strict;”开头。:-)

于 2008-10-21T15:23:15.773 回答
5

另一个值得注意的区别是,“使用警告”杂注还允许您选择要启用的特定警告(同样,“无警告”允许您选择要禁用的警告)。

于 2008-10-21T21:10:03.157 回答
2

除了使用 pragma 启用/禁用特定断言之外,您还可以将部分或全部警告提升为错误:

use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';
于 2008-10-22T21:09:27.527 回答