簡體   English   中英

清理龐大的Perl Codebase

[英]Cleanup huge Perl Codebase

我目前正在開發一個大約15年的Web應用程序。

它主要包含帶有HTML :: Template模板的CGI perl腳本。

它有超過12 000個文件和大約260 MB的總代碼。 我估計不需要超過1500 perl腳本,我想擺脫所有未使用的代碼。

實際上沒有為代碼編寫測試。

我的問題是:

  • 您是否了解任何可以幫助我獲取僅use d和require d模塊的列表的CPAN模塊?
  • 如果你想擺脫所有額外的代碼,你的方法是什么?

我在考慮以下方法:

  • 嘗試覆蓋userequire perl builtins使用在特定位置輸出加載的文件名的perl
  • 覆蓋warnings和/或strict模塊import功能,並在特定位置輸出文件名
  • 研究Devel::Cover perl模塊並采用相同的方法並在進行手動測試而不是自動測試時分析代碼
  • 用自定義的perl可執行文件替換perl可執行文件,它將記錄它讀取的文件的每個名稱(我不知道該怎么做)
  • 一些創造性地使用lsof (?!?)

Devel :: Modlist可能會為您提供所需,但我從未使用過它。

我需要做幾次像這樣的事情,我選擇了在程序結束時檢查%INC的更強力方法。

END {
    open my $log_fh, ...;
    print $log_fh "$_\n" for sort keys %INC;
}

作為第一個近似值,我會簡單地運行

egrep -r '\<(use|require)\>' /path/to/source/*

然后花幾天時間清理那里的輸出。 這將為您提供所使用或要求的所有模塊的列表。

您也可以使用@INC來排除某些庫路徑。

如果您正在嘗試確定執行路徑,則可以通過調試器運行代碼,並打開“跟蹤”(即調試器中的“t”),然后將輸出重定向到文本文件以進行進一步分析。 我知道運行CGI時很難...

假設打開了相關的時間戳,您可以檢查各種腳本文件的訪問時間 - 這應該排除任何未使用的頂級腳本文件。

可能值得為CGI.pm添加一些工具來記錄當前的腳本名稱($ 0)以查看發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM