use

好,现在让我们来理解一下包、模块、类的方法和BEGIN块那模棱两可的行为以及语义,我会来解释一下超级常见的[use](http://perldoc.perl.org/functions/use.html)函数。

下面三条语句:

  1. use Caterpillar ("crawl", "pupate");
  2. use Caterpillar ();
  3. use Caterpillar;

分别和下面的三段等价:

  1. BEGIN {
  2. require Caterpillar;
  3. Caterpillar->import("crawl", "pupate");
  4. }
  5. BEGIN {
  6. require Caterpillar;
  7. }
  8. BEGIN {
  9. require Caterpillar;
  10. Caterpillar->import();
  11. }
  • 不,这三个例子并没有放错顺序,只是Perl比较笨罢了。
  • use只是BEGIN块的伪装,同样的警告对此也适用。use 语句必须总是放在文件开头,并且永远不要放在条件分支里
  • import()并不是Perl的内置函数,它只是一个用户自定义的类方法。定义或者继承import()函数的重任就落在写Caterpillar这个包的程序员身上了。这个方法理论上可以接受任何东西作为参数,也可以对参数做任何操作。use Caterpillar;可以做任何事情,你需要查询Caterpillar.pm的文档来判断到底会发生什么。
  • 请注意require Caterpillar是如何加载一个名为Caterpillar.pm模块的,而Caterpillar->import()则调用定义在Caterpillar里的子程序import()。我们只能一起期待这里的模块和包是一致的!