为什么Perl中的"import"子例程不是大写的

Joe*_*ger 6 perl naming-conventions implicit

我好奇.大多数Perl隐式调用的子例程必须以全部大写字母命名.TIESCALAR,DESTROY等实际上perldoc perltoot

如果构造函数可以有任意名称,那么为什么不使用析构函数呢?因为虽然显式调用了构造函数,但析构函数不是.破坏通过Perl的垃圾收集(GC)系统自动发生,这是一个快速但有些懒惰的基于参考的GC系统.要知道要调用什么,Perl坚持将析构函数命名为DESTROY.Perl关于调用析构函数的正确时间的概念目前还没有明确定义,这就是为什么你的析构函数在被调用时不应该依赖它们的原因.

为什么DESTROY全部上限?Perl有时会使用纯大写的函数名作为约定来表示Perl会以某种方式自动调用该函数.隐式调用的其他函数包括BEGIN,END,AUTOLOAD,以及perltie中描述的绑定对象使用的所有方法.

那么为什么import子程序是小写的呢?有没有人对此有很好的了解?

DVK*_*DVK 6

我会说" import"不是隐含的.这是一个由实现发出的显式调用use.引用perldoc使用:

它完全等同于:

BEGIN { require Module; Module->import( LIST ); }


Ada*_*ire 3

为了稍微扩展 DVK 的答案,在某些情况下,您需要显式调用import,例如在加载可选模块或自动填充命名空间时:

eval "require $modulename; $modulename->import( LIST ); ";
Run Code Online (Sandbox Code Playgroud)

我想不出您想要显式调用 DESTROY、TIESCALAR 等的任何情况