Devel::NYTProf v4の出力をCGI programにすると、ソースコードファイル -という名前のレポートでdiagnostics.pm
が見つかった。私のコードに診断機能がないとPerlがdiagnostics.pmをコンパイルするのはなぜですか?
まずそれは製品コードになりますなぜ私は理解していませんでした。私は報告書をさらに深く掘り下げ、それがmain::[email protected]
によって呼び出されたことを知った。これは次の行です。
# spent 34µs (26+8) within main::[email protected] which was called: # once (26µs+8µs) by main::RUNTIME at line 15
use strict;
# spent 34µs making 1 call to main::[email protected] # spent 8µs making 1 call to strict::import
# spent 36µs (17+19) within main::[email protected] which was called: # once (17µs+19µs) by main::RUNTIME at line 16
use warnings;
# spent 36µs making 1 call to main::[email protected] # spent 19µs making 1 call to warnings::import
# spent 292ms (171+121) within main::[email protected] which was called: # once (171ms+121ms) by main::RUNTIME at line 17
no diagnostics;
# spent 292ms making 1 call to main::[email protected]
# spent 135µs (27+108) within main::[email protected] which was called: # once (27µs+108µs) by main::RUNTIME at line 18
use Carp qw(carp croak);
これは原因であるようです。私はno diagnostics
行を削除し、コールは消え、効果的に約300msの時間を節約しました。 、
使用して、インポートの意味 をunimports該当する宣言がありませんつまり、それは代わりに 輸入のunimportモジュールリストを呼び出します。ここでは
はperldoc
use
がno
キーワードについて言っているのです。これは、VERSION、省略または の空のLIST、またはインポート方法が見つからない場合のインポートと同じように動作します。no integer; no strict 'refs'; no warnings;
だからここに私の実際の質問です:私はno diagnostics
を呼び出す場合、それはunimport
EDがある前に、それが実際にロードされていると仮定して、正しいですか?
no diagnostics
への呼び出しは、このコードと似ていますか?
BEGIN {
require diagnostics.pm;
diagnostics->unimport;
}
結果的に、インポートされていないものをインポートするのは悪い考えですか?それは実際に最初に読み込まれるためです。
誰もが指摘する前に:私は(まだ)何かを最適化しようとはしていませんが、私は単に何が呼び出されているのかを理解しようとしています。 – simbabque