问问题
13693 次
2 回答
53
base
试图做太多的事情——自动处理加载模块,但也允许从已经加载的类(可能来自名称不是基于模块名称的文件)建立继承。为了让它发挥作用,在某些情况下,有一些骇客行为会导致令人惊讶的结果。不是破坏向后兼容性,而是parent
引入了具有更清晰语义的新替换编译指示。
parent
将成为 5.10.1 的核心模块。
更新:忘记了base
句柄fields
(如果您使用的是fields
编译指示),这parent
是不行的。
于 2009-05-18T07:26:50.140 回答
42
借助来自 ysth 的额外信息,我能够看到文档中的差异:
该base
pragma 执行以下操作:
- 将命名包添加到
@ISA
- 加载与命名包同名的模块
require
(除非它检测到包已经加载) - 如果与包同名的模块不存在,则不会失败
- 如果命名包中没有符号,则死亡
- 如果
$VERSION
命名包中不存在,则 base 将其设置为"-1, set by base.pm"
fields
如果存在,则初始化命名包的- 不调用命名包的导入函数
该parent
pragma 执行以下操作:
- 将命名包添加到
@ISA
- 加载与命名包同名的模块
require
- 如果不存在与包同名的模块,则接受一个选项,告诉它不要死
于 2009-05-18T13:43:47.477 回答