我应该使用命令行开关或编译指示打开Perl警告吗?

时间:2008-10-21 13:40:22

标签: perl warnings pragma

开始使用Perl脚本时,以下两个示例之间是否存在差异?如果是这样,我何时会使用另一个?

示例1:

#!/usr/bin/perl

use warnings;

示例2:

#!/usr/bin/perl -w

6 个答案:

答案 0 :(得分:31)

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

所以,理想情况下这并不重要,但实际上,最终用户通常不会使用交换机而是使用编译指示。

答案 1 :(得分:17)

-w命令行开关为整个解释器全局打开警告。另一方面,use warnings是一个“词汇编纂”,仅适用于使用它的词法范围。通常,您将它放在文件的顶部,以便它适用于整个文件,但您也可以将其范围限定为特定的块。此外,如果您需要执行其他警告生成行为,则可以使用no warnings在块内暂时关闭它们。如果您已-w开启,则无法执行此操作。

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

答案 2 :(得分:10)

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

答案 3 :(得分:5)

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

答案 4 :(得分:1)

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

use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';

答案 5 :(得分:-6)

两者都做!总是!