Почему 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;
}

В результате, плохая идея - просто импортировать вещи, которые никогда не импортировались, потому что они действительно загружаются первыми?

Ответы на вопрос(1)

Ваш ответ на вопрос