为什么Perl编译diagnostics.pm如果我的代码没有诊断?
当我查看
Devel::NYTProf v4的输出为
CGI program,我遇到了诊断.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 ); 所以这似乎是罪魁祸首。我删除了无诊断线,呼叫去了,有效地节约了大约300ms的时间。 这里是perldoc
所以这里是我的实际问题:我是否正确的假设,如果我调用没有诊断,它实际上加载之前,它被卸载? 是没有诊断类似这段代码的调用吗? BEGIN { require diagnostics.pm; diagnostics->unimport; } 因此,是不是一个坏主意,只是unimport的东西,从来没有被导入,因为实际上加载它首先? 解决方法
是。它的确完全相当于 BEGIN { require diagnostics; diagnostics->unimport; } 所以没有模块命令实际加载和编译模块;包括在BEGIN块等中执行不在任何子中的代码;对于给定模块的所有依赖性(对于每个使用/需求内部)是相同的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |