6

私は現在、約 15 年前の Web アプリケーションに取り組んでいます。

主にHTML::Templateテンプレートを使用したCGI perl スクリプトが含まれています。

12,000 以上のファイルと、合計約 260 MB のコードがあります。必要な perl スクリプトは 1500 個以下であると見積もっており、未使用のコードをすべて削除したいと考えています。

コード用に書かれたテストは事実上ありません。

私の質問は次のとおりです。

  • d およびd モジュールのみのリストを取得するのに役立つCPAN モジュールを知っていますか?userequire
  • 余分なコードをすべて取り除きたい場合、どのようなアプローチをとりますか?

私は次のアプローチで考えていました:

  • useおよびrequireperl ビルトインを、ロードされたファイル名を特定の場所に出力するものでオーバーライドしてみてください
  • warningsand/or strictmodulesimport関数をオーバーライドし、特定の場所にファイル名を出力します
  • perl モジュールを研究しDevel::Cover、同じアプローチを取り、自動テストの代わりに手動テストを行うときにコードを分析する
  • perl 実行可能ファイルをカスタムのものに置き換えます。これにより、読み取ったファイルの各名前がログに記録されます (その方法はまだわかりません)。
  • lsof(?!?)のクリエイティブな使い方
4

3 に答える 3

5

Devel :: Modlistはあなたが必要とするものをあなたに与えるかもしれません、しかし私はそれを使ったことがありません。

%INC私はこのような何かをする必要があった数回、プログラムの最後に検査するより強引なアプローチを選択しました。

END {
    open my $log_fh, ...;
    print $log_fh "$_\n" for sort keys %INC;
}
于 2012-05-25T15:02:32.940 に答える
2

最初の概算として、私は単に実行します

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

次に、そこからの出力をクリーンアップするために数日を費やします。これにより、使用または必要なすべてのモジュールのリストが表示されます。

@INC特定のライブラリ パスを除外することもできます。

実行パスを特定しようとしている場合は、「trace」(デバッガーでは「t」) をオンにしてデバッガーでコードを実行し、出力をテキスト ファイルにリダイレクトしてさらに分析することができます。CGIを実行するとこれが難しいことを私は知っています...

于 2012-05-25T13:54:39.863 に答える
2

関連するタイムスタンプがオンになっていると仮定すると、さまざまなスクリプト ファイルのアクセス時間を確認できます。これにより、使用されていない最上位のスクリプト ファイルが除外されます。

現在のスクリプト名 ($0) をログに記録して、何が起こっているかを確認するために、CGI.pm にいくつかのインストルメンテーションを追加する価値があるかもしれません。

于 2012-05-25T15:31:53.573 に答える