Почему Perl компилирует Diagnostics.pm, если в моем коде нет диагностики?
Когда я смотрел на выводDevel :: NYTProf v4 дляПрограмма CGIЯ наткнулся наdiagnostics.pm
в отчетеФайлы исходного кода - заказал в исключительное время, затем имя
Сначала я неЯ не понимаю, почему это будет в рабочем коде. Я углубился в отчет и обнаружил, что он был вызванmain::BEGIN@17
, Это, в свою очередь, следующая строка:
# spent 34µs (26+8) within main::BEGIN@15 which was called: # once (26µs+8µs) by main::RUNTIME at line 15
use strict;
# spent 34µs making 1 call to main::BEGIN@15 # spent 8µs making 1 call to strict::import
# spent 36µs (17+19) within main::BEGIN@16 which was called: # once (17µs+19µs) by main::RUNTIME at line 16
use warnings;
# spent 36µs making 1 call to main::BEGIN@16 # spent 19µs making 1 call to warnings::import
# spent 292ms (171+121) within main::BEGIN@17 which was called: # once (171ms+121ms) by main::RUNTIME at line 17
no diagnostics;
# spent 292ms making 1 call to main::BEGIN@17
# spent 135µs (27+108) within main::BEGIN@18 which was called: # once (27µs+108µs) by main::RUNTIME at line 18
use Carp qw( carp croak );
Так что это, кажется, виновник. Я удалилno diagnostics
линия, и звонок пропал, эффективно экономя около 300 мс времени.
Вот'с чемperldocuse
говорит оno
ключевое слово:
Там'Это соответствующая декларация no, которая не импортирует значения, импортированные путем использования, т.е. она вызывает unimport Module LIST вместо import. Он ведет себя так же, как импорт с VERSION, пропущенным или пустым LIST, или не найден метод unimport.
no integer;
no strict 'refs';
no warnings;
Так вот'мой актуальный вопрос:Правильно ли я предположить, что если я позвонюno diagnostics
, это на самом деле загружается, прежде чем этоunimport
ред?
Это вызовno diagnostics
похож на этот кусок кода?
BEGIN {
require diagnostics.pm;
diagnostics->unimport;
}
В результате, плохая идея - просто импортировать вещи, которые никогда не импортировались, потому что они действительно загружаются первыми?