什么时候应该使用“使用”和何时“需要”以及什么时候在“好的编程实践”中使用“AUTOLOAD”?

时间:2012-02-12 14:27:48

标签: perl

我们什么时候应该使用“使用”和“需要”时以及perl中的“AUTOLOAD”?我需要一个拇指规则。

1 个答案:

答案 0 :(得分:16)

use相当于BEGIN { require Module; Module->import( LIST ); }

所以,主要区别在于:

  • 在编译时使用

  • 使用自动调用导入子例程(可以执行任何,但主要用于将标识符导出到调用者的命名空间中)

  • 如果无法加载模块,则使用die(缺失/编译错误)

因此:

  • 当您需要动态加载模块时(例如,根据命令行参数确定要加载的模块),请使用require

  • 通常,当您需要精确控制何时加载模块时,使用requireuse将在前一个use或{{1}之后加载模块阻止,在编译时)。

  • 如果您需要以某种方式绕过调用模块的BEGIN子例程,请使用import()

  • 当你需要做一些聪明的事情来处理加载错误(缺少模块,模块无法编译)时,你可以将require包装成require语句,这样整个计划不仅仅是死亡。

    您可以使用eval { }进行模拟,但要以相当优雅的方式进行模拟(在早期的use块中捕获die信号应该有效)。但BEGIN更好。

  • 在所有其他情况下,请使用eval { require }

我没有涵盖AUTOLOAD,因为那是一个不同的野兽。如果您想要调用尚未导入命名空间的子例程,则可以使用它。