Когда я смотрел вывод Devel::NYTProf v4 для Программа CGI, я столкнулся с 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
, и вызов был ушел, эффективно экономя около 300 мс времени.
Здесь perldoc use
говорится о ключевом слове no
:
Здесь есть соответствующее объявление, которое не объединяет значения импортируется с использованием, т.е. он вызывает unimport Module LIST вместо Импортировать. Он ведет себя так же, как импорт с помощью VERSION, опущен или пустой LIST или не найден метод unimport.
no integer; no strict 'refs'; no warnings;
Итак, вот мой реальный вопрос: Правильно ли я предполагаю, что если я вызову no diagnostics
, он будет загружен до того, как будет unimport
ed?
Является ли вызов no diagnostics
похожим на этот фрагмент кода?
BEGIN {
require diagnostics.pm;
diagnostics->unimport;
}
В результате, это плохая идея просто unimport материала, который никогда не был импортирован, потому что это на самом деле загружает его в первую очередь?