代码之家  ›  专栏  ›  技术社区  ›  cowgod

我应该用命令行开关还是pragma打开Perl警告?

  •  15
  • cowgod  · 技术社区  · 17 年前

    下面开始Perl脚本的两个示例之间有区别吗?如果是这样,我什么时候会用一个而不是另一个?

    示例1:

    #!/usr/bin/perl
    
    use warnings;
    

    示例2:

    #!/usr/bin/perl -w
    
    5 回复  |  直到 17 年前
        1
  •  31
  •   Leon Timmermans    17 年前

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

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

        2
  •  17
  •   friedo    17 年前

    这个 -w 命令行开关为整个解释器全局打开警告。另一方面, use warnings 是一个“词汇pragma”,仅适用于使用它的词汇范围。通常,你会把它放在文件的顶部,这样它就适用于整个文件,但你也可以把它限定在特定的块上。此外,您还可以使用 no warnings 在需要执行其他警告生成行为的情况下,在块内暂时关闭它们。如果你有 w 上。

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

        3
  •  10
  •   runrig    16 年前

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

        4
  •  5
  •   rjray    17 年前

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

        5
  •  2
  •       17 年前

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

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