为啥 LWP::UserAgent 是通过 require LWP::UserAgent 而不是使用 LWP::UserAgent 导入的?
Posted
技术标签:
【中文标题】为啥 LWP::UserAgent 是通过 require LWP::UserAgent 而不是使用 LWP::UserAgent 导入的?【英文标题】:Why LWP::UserAgent is imported by require LWP::UserAgent instead of use LWP::UserAgent?为什么 LWP::UserAgent 是通过 require LWP::UserAgent 而不是使用 LWP::UserAgent 导入的? 【发布时间】:2011-09-24 18:58:29 【问题描述】:我对这种语言还很陌生,但我之前一直使用use
导入特定模块,
为什么LWP::UserAgent
使用require
来完成perldoc LWP::UserAgent
的工作:
require LWP::UserAgent;
【问题讨论】:
【参考方案1】: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
用于其他模块。
require
use
【讨论】:
所以区别是import LWP::UserAgent;
,那么这到底是做什么的呢?
import LWP::UserAgent
是LWP::UserAgent->import()
的变体语法;它调用了一个名为import
的类方法。通常,这将使用 Exporter 模块将函数导出到调用者的命名空间中,但它实际上可以做模块作者选择做的任何事情。【参考方案2】:
require Module::Name 与 use 的效果相同,只是在运行时,而不是编译时。当您想要有条件地需要一个模块时,这有时是有利的。我认为文档没有任何特别的理由说需要而不是使用。
【讨论】:
编译时间和运行时间的差异只存在于 Perl 持久化的fastcgi
,而不是CGI
模式,对吧?
@Learning,没有。 require
只会加载和执行一次模块,无论require
是在编译时完成还是在运行时完成。
学习:一般来说没有。如果在 require 之前还有其他代码,它将在 require 失败之前执行。【参考方案3】:
这不是理想的答案,但可能对像我一样从谷歌来到谷歌的人有所帮助。
对于消息错误:在 ./apache_accesses 第 86 行未找到 LWP::UserAgent。
解决方案: apt-get install libwww-perl
【讨论】:
这个问题是关于use
vs. require
,以LWP为例。这不是让 LWP 工作。此外,您的答案是特定于 Debian 的。
我知道,但我在寻找这个灵魂,并首先从谷歌获得了这个网站。以上是关于为啥 LWP::UserAgent 是通过 require LWP::UserAgent 而不是使用 LWP::UserAgent 导入的?的主要内容,如果未能解决你的问题,请参考以下文章
未通过 https 使用 LWP::UserAgent get() 获取预期内容