天天看點

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版本的警告是一樣的。