天天看點

一個可以更好地調試的 Perl 子產品

僅用于調試或開發調整時的 Perl 代碼塊有時會很有用。這很好,但是這樣的代碼塊可能會對性能産生很大的影響, 尤其是在運作時才決定是否執行它。 Curtis "Ovid" Poe 最近編寫了一個可以幫助解決這個問題的子產品: Keyword::DEVELOPMENT 。該子產品利用

Keyword::Simple

和 Perl 5.012 中引入的可插入關鍵字架構來建立了新的關鍵字:

DEVELOPMENT

。它使用

PERL_KEYWORD_DEVELOPMENT

環境變量的值來确定是否要執行一段代碼。

使用它不能更容易了:

  1. use Keyword::DEVELOPMENT;

  2. sub doing_my_big_loop {

  3. my $self = shift;

  4. DEVELOPMENT {

  5. # insert expensive debugging code here!

  6. }

  7. }

在編譯時,

DEVELOPMENT

塊内的代碼已經被優化掉了,根本就不存在。

你看到好處了麼?在沙盒中将

PERL_KEYWORD_DEVELOPMENT

環境變量設定為

true

,在生産環境設為

false

,并且可以将有價值的調試工具送出到你的代碼庫中,在你需要的時候随時可用。

在缺乏進階配置管理的系統中,你也可以使用此子產品來處理生産和開發或測試環境之間的設定差異:

  1. sub connect_to_my_database {

  2. my $dsn = "dbi:mysql:productiondb";

  3. my $user = "db_user";

  4. my $pass = "db_pass";

  5. DEVELOPMENT {

  6. # Override some of that config information

  7. $dsn = "dbi:mysql:developmentdb";

  8. }

  9. my $db_handle = DBI->connect($dsn, $user, $pass);

  10. }

稍後對此代碼片段的增強使你能在其他地方,比如 YAML 或 INI 中讀取配置資訊,但我希望您能在此看到該工具。

我檢視了關鍵字

Keyword::DEVELOPMENT

的源碼,花了大約半小時研究,“天哪,我為什麼沒有想到這個?”安裝

Keyword::Simple

後,Curtis 給我們的子產品就非常簡單了。這是我長期以來在自己的編碼實踐中所需要的一個優雅解決方案。

原文釋出時間為:2018-05-21

本文來自雲栖社群合作夥伴“

Linux中國開源社群

”,了解相關資訊可以關注“

”。

繼續閱讀