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

Man*_*nde 7 perl

什么时候我们应该使用"使用"和何时"需要"以及何时使用"AUTOLOAD" perl?我需要一个拇指规则.

DVK*_*DVK 16

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

所以,主要区别在于:

  • 使用在编译时使用

  • 使用自动调用import子例程(除了主要用于将标识符导出到调用者的命名空间之外,它可以执行任何操作)

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

因此:

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

  • 通常,当您需要精确控制何时加载模块时,使用require(use将在前一个useBEGIN块之后,在编译时加载模块).

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

  • 当你需要做一些聪明的事情来处理加载错误(缺少模块,模块无法编译)时,你可以将其包装require成一个eval { }语句,这样整个程序就不会死掉.

    你可以用use相当优雅的方式模拟它(die早期BEGIN块中的陷阱信号应该起作用).但是eval { require }更好.

  • 在所有其他情况下,请使用 use

我没有涵盖AUTOLOAD,因为那是一个不同的野兽.它的用法是在您想要调用尚未导入到命名空间的子例程的情况下.

  • 简而言之,您通常需要"使用".AUTOLOAD用于拦截对未定义方法的调用. (2认同)