我刚刚遇到这种语法:
BEGIN { IPC::Shareable->use };
为什么呢? 它是我贡献的一个模块的一部分,一个片段:
package A;
use A;
use IPC::Shareable;
use base 'C';
作者将其更改为:
package A;
use A;
BEGIN { IPC::Shareable->use };
use base 'C';
试着问他,但尚未得到回复。我的问题是:
为什么在这种情况下使用begin?不是use
语句类似于:
BEGIN { 要求IPC ::可分享; IPC :: Shareable->进口(); }
为什么IPC::Shareable->use
代替use IPC::Shareable;
?
答案 0 :(得分:3)
猜测,UNIVERSAL::require已在某个时刻加载。此模块允许将use
作为方法调用。
UNIVERSAL :: require曾经有一些相当令人担忧的错误,但从0.17开始应该是最好的。但是,我相信Module::Runtime比UNIVERSAL :: require更多。
作者为何进行此更改?可能有几个原因,但最可能的情况似乎是UNIVERSAL :: require提供的use
方法在模块不可用时不会死亡。