天天看点

Learning Perl,4th Edition(2-3 内建警告)

2.3 perl 的内建警告机制

    perl 可以被设置成通知用户警告的方式,当有可疑的东西在你的程序中运行时。

    使用 -w 在命令行,打开警告开关。

    $perl -w my_program

    或者,如果总是需要警告,你可以请求他们在 #!行。

    #!/usr/bin/perl -w

    这个也可以在非unix系统上运行, 传统的习惯写成这样,因为路径对perl

    不会产生影响:

    #!perl -w

    如果是5.6或者以后的版本,你可以使用编译指令打开warnings.(小心,

    因为它不会起作用 对于早期的perl版本)

    #!/usr/bin/perl

    usr warnings;

    现在,perl 会给一个警告,如果你把'12fred34'用作一个数字:

    Argument "12fred34" isn't numeric

    当然, 警告通常是对程序员有意义的,不是为了最终用户。如果一个程序员

    不看这个警告,它很可能没有任何用处。 警告不会改变你的程序的行为,除非

    他偶尔发生缺陷的时候。如果你得到一个警告消息 却不能理解,你可以取得一个更长的

    解释通过使用 diagnostics编译指示。perldiag 主页 有短的警告信息也有长的详细解释。

    #!/usr/bin/perl

    use diagnostics;

    当你添上了 use diagnostics编译指示,你的程序运行时看上去会暂停一会儿。

    那是因为你的程序需要做很多工作(正在狼吞虎咽大块的内存),当你正想读详细文档

    一旦perl 提醒你有错误。

    如果需要,这可以作为一个加速程序的措施,一旦你不再需要读这些警告文档,你可以

    删除 use diagnostics编译指示。(当然更好的做法是你可以修改自己的程序来避免产生

    警告,这样仅仅是减少读取输出).

    一个更深的优化是使用一个perl的命令行选项 -M,只有当需要的时候才载入编译指示

    ,避免每次都要修改源程序来使diagnostics有效或者无效。

     $ perl -Mdiagnostics ./my_program

    Argument "12fred34" isn't numeric in addition (+) at ./my_program line 17 (#1)

        (W numeric) The indicated string was fed as an argument to

        an operator that expected a numeric value instead.  If you're

        fortunate the message will identify which operator was so unfortunate.

    当我们跑过代码时,Perl 将能够警告我们一个错误已经发生,我们将会指出它,但是不能

   依赖这些文本和未来的perl的RELEASE版本的警告是一样的。