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

时间:2011-02-19 16:19:47

标签: perl naming-conventions implicit

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

  

如果构造函数可以任意   名字,那么为什么不是破坏者呢?   因为虽然构造函数是   显式调用,析构函数是   不。毁灭发生了   自动通过Perl的垃圾   集合(GC)系统,这是一个   快但有点懒   基于参考的GC系统。要知道   怎么称呼,Perl坚持认为   析构函数命名为DESTROY。 Perl的   是时候打电话了   析构函数没有明确定义   目前,这就是你的原因   析构者不应该依赖于何时   他们被称为。

     

为什么DESTROY全部上限? Perl on   场合使用纯粹的大写字母   函数名作为约定   表明该功能将是   在某些情况下由Perl自动调用   办法。其他被称为   隐含地包括BEGIN,END,   AUTOLOAD,加上使用的所有方法   在perltie中描述的绑定对象。

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

3 个答案:

答案 0 :(得分:6)

我会说“import”不会被隐含地调用。这是use实施发出的明确要求。引用perldoc use

  

完全等同于:

     

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

答案 1 :(得分:3)

要稍微扩展DVK的答案,有些情况下您可以合法地明确调用import,例如在加载可选模块或自动填充名称空间时:

eval "require $modulename; $modulename->import( LIST ); ";

我无法想到你想明确地调用DESTROY,TIESCALAR等的任何情况。

答案 2 :(得分:1)

这只是对设计的疏忽。改变已经太晚了。