麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Perl > 正文

Perl中捕獲警告信息、異常信息并寫入日志詳解

2020-06-04 20:33:54
字體:
來源:轉載
供稿:網友

雖然建議在每個Perl腳本和模塊中開啟警告,可是你又不想用戶看到Perl發出的警告。

一方面你想在代碼前面使用use warnings作為你的安全網,另一方面,通常警告會出現在屏幕上。多數情況下,客戶不知道如何處理這些警告。如果幸運的話這些警告僅僅讓客戶驚訝一下,當然,不幸的是他們嘗試著去修復它們... (這里說的不是Perl程序員。)

第三方面,你或許想要保存這些警告供之后分析。

此外,在很多地方還有很多Perl腳本和應用程序沒有使用use warnings也沒有在#!行中使用-w。加上了use warnings就可能會產生大量的警告。

長遠來看,當然是要消除這些警告,但是短期來說呢?

即便是長期計劃,你也不能寫出完全沒有BUG的代碼,你也不能確保應用將來永遠不會打印出警告信息。

你能么?

你可以在警告打印到屏幕之前捕獲它們。

信號
Perl有一個叫做%SIG的內建hash表,其中的鍵是操作系統信號的名字。對應的值是函數(大多數是函數引用),這些函數會在特定的信號觸發時被調用。

除了系統提供的標準信號以外,Perl還添加了兩個內部“信號”。其中一個是<h__warn__< span="">,它在每次代碼調用warn()函數的時候觸發。另外一個是__DIE__,它在每次調用die()時觸發。

在本文中,我們會看到這些是怎樣影響警告信息的。

匿名函數

sub { }是匿名函數,也就是一個只有函數體而沒有名字的函數。(在這個例子中函數體也是空的,但是我希望你能明白我的意思。)

捕獲警告--不處理

如果添加如下代碼:
代碼如下:
  local $SIG{__WARN__} = sub {
     # 此處可以獲得警告信息
  };

這實際上表示每次程序的某個地方產生了警告信息時,不做任何處理。基本上,這會隱藏所有的警告。

捕獲警告--并轉換成異常

You could also write: 你也可以寫成:
代碼如下:
  local $SIG{__WARN__} = sub {
    die;
  };

這樣會在每次產生警告的時候調用die(),也就是把每個警告轉換成異常。

如果你想在異常中包含警告信息,可以這么寫:
代碼如下:
  local $SIG{__WARN__} = sub {
    my $message = shift;
    die $message;
  };

實際的警告信息會作為唯一的參數傳遞給匿名函數。

捕獲警告--并寫入日志
你可能想在中間做些其他事情:

過濾嘈雜的警告信息,留待后來分析:
代碼如下:
  local $SIG{__WARN__} = sub {
    my $message = shift;
    logger($message);
  };

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产一级淫 | 国产精品久久久久久久久久尿 | 香蕉成人在线视频 | 国产亚洲精品久久久久婷婷瑜伽 | 亚洲国产成人久久成人52 | av电影网站在线 | 欧美成人二区 | 日本特级a一片免费观看 | 人人玩人人爽 | 久久免费视频3 | 国产精品久久久久久久不卡 | av免费提供| 国产精品久久久久影院老司 | 天天夜碰日日摸日日澡性色av | 久久亚洲线观看视频 | 美女黄网站免费观看 | 久久超| 免费放黄网站在线播放 | 国产91在线播放九色 | xxxxxx性 | 福利免费视频 | 一级做a爰性色毛片免费1 | 黄色电影免费提供 | 欧美成人小视频 | 久久日本 | 色综合狠狠 | gogo全球大胆高清人露出91 | 欧美女孩videos | 看免费黄色大片 | 91亚洲免费视频 | 国产午夜网 | 国产成人在线综合 | 一区二区三区黄色 | 国产一级二级毛片 | va视频在线观看 | 日本在线观看中文字幕 | www.国产一区.com| 双性帝王调教跪撅打屁股 | 国产亚洲精品久久久久婷婷瑜伽 | 热re91久久精品国产99热 | 成人偷拍片视频在线观看 |