use
好,现在让我们来理解一下包、模块、类的方法和BEGIN
块那模棱两可的行为以及语义,我会来解释一下超级常见的[use](http://perldoc.perl.org/functions/use.html)
函数。
下面三条语句:
use Caterpillar ("crawl", "pupate");
use Caterpillar ();
use Caterpillar;
分别和下面的三段等价:
BEGIN {
require Caterpillar;
Caterpillar->import("crawl", "pupate");
}
BEGIN {
require Caterpillar;
}
BEGIN {
require Caterpillar;
Caterpillar->import();
}
- 不,这三个例子并没有放错顺序,只是Perl比较笨罢了。
use
只是BEGIN
块的伪装,同样的警告对此也适用。use
语句必须总是放在文件开头,并且永远不要放在条件分支里。import()
并不是Perl的内置函数,它只是一个用户自定义的类方法。定义或者继承import()
函数的重任就落在写Caterpillar
这个包的程序员身上了。这个方法理论上可以接受任何东西作为参数,也可以对参数做任何操作。use Caterpillar;
可以做任何事情,你需要查询Caterpillar.pm
的文档来判断到底会发生什么。- 请注意
require Caterpillar
是如何加载一个名为Caterpillar.pm
的模块的,而Caterpillar->import()
则调用定义在Caterpillar
包里的子程序import()
。我们只能一起期待这里的模块和包是一致的!
当前内容版权归 胡瀚森(Sam Hu)译 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 胡瀚森(Sam Hu)译 .