【发布时间】:2011-09-24 18:58:29
【问题描述】:
我对这种语言还很陌生,但我之前一直使用use 导入特定模块,
为什么LWP::UserAgent 使用require 来完成perldoc LWP::UserAgent 的工作:
require LWP::UserAgent;
【问题讨论】:
标签: perl require perl-module
我对这种语言还很陌生,但我之前一直使用use 导入特定模块,
为什么LWP::UserAgent 使用require 来完成perldoc LWP::UserAgent 的工作:
require LWP::UserAgent;
【问题讨论】:
标签: perl require perl-module
use LWP::UserAgent;
与
相同BEGIN {
require LWP::UserAgent;
import LWP::UserAgent;
}
如果require LWP::UserAgent; 是可接受的,则表明import 对 LWP::UserAgent 没有任何作用。也许文档使用require 的目的是为了巧妙地暗示这一点?
require LWP::UserAgent; 和use LWP::UserAgent; 之间的唯一区别在于require 的执行时间。对于前者,它发生在整个文件编译之后。对于后者,它会在该语句被编译后立即发生。实际上,面向对象的模块没有太大区别。
我个人使用
use LWP::UserAgent qw( );
和这个是一样的
BEGIN {
require LWP::UserAgent;
}
这样,我保证不会导入任何我不想要的东西,而且我使用熟悉的use 用于其他模块。
【讨论】:
import LWP::UserAgent; ,那么这到底是做什么的呢?
import LWP::UserAgent 是LWP::UserAgent->import() 的变体语法;它调用了一个名为import 的类方法。通常,这将使用 Exporter 模块将函数导出到调用者的命名空间中,但它实际上可以做模块作者选择做的任何事情。
require Module::Name 与 use 的效果相同,只是在运行时,而不是编译时。当您想要有条件地需要一个模块时,这有时是有利的。我认为文档没有任何特别的理由说需要而不是使用。
【讨论】:
fastcgi,而不是CGI 模式,对吧?
require 只会加载和执行一次模块,无论require 是在编译时完成还是在运行时完成。
这不是理想的答案,但可能对像我一样从谷歌来到谷歌的人有所帮助。
对于消息错误:在 ./apache_accesses 第 86 行未找到 LWP::UserAgent。
解决方案: apt-get install libwww-perl
【讨论】:
use vs. require,以LWP为例。这不是让 LWP 工作。此外,您的答案是特定于 Debian 的。