2012-07-31 109 views
1

我不太熟悉Perl,但我正在使用它来制作一个简单的脚本。该脚本将与Qualys进行交互,因此在查看有关Qualys API的信息时,我在查看其示例代码的同时发现了此声明。我已将它放在Pastebin.com(here)上,因此您不必下载它即可查看它。如果由于某种原因,你确实想自己下载它,here是一个链接到我为那些想要能够下载源代码的页面(它是“Get Map”之一)。了解这个对象创建语句

不管怎么说,这里是有我有点困惑的声明(线路261):

$request = new HTTP::Request GET => $url; 

我感到困惑的newGET => $url部分语句。

  1. 我想我大部分明白是怎么回事的语句new一部分,但如果有人能解释HTTP::Request工作与创建一个新的LWP::UserAgent这将有助于澄清这怎么行(我看着LWP :: UserAgent的在CPAN上,但他们在new子程序解释下的“KEY/DEFAULT”表对我来说没有意义)。
  2. 我真的不知道发言中GET => $url部分发生了什么。我的猜测是它正在为HTTP::RequestLWP::UserAgent分配一个值,但我无法找到任何信息来备份该想法。

回答

6

给定的线相当于

$request = HTTP::Request->new(GET => $url); 

其也可以写成

$request = HTTP::Request->new('GET', $url); 

该示例中使用的间接方法的语法。

HTTP::RequestLWP::UserAgent之间的连接是在CPAN documentation勾勒作为followes:

require HTTP::Request; 
$request = HTTP::Request->new(GET => 'http://www.example.com/'); 

$ua = LWP::UserAgent->new; 
$response = $ua->request($request); 

所以HTTP:.Request->new(...)创建一个新的请求可由用户代理

+0

感谢您的执行说明。我从来不知道你可以通过将模块放在包的前面来调用'new'。 – 2012-07-31 15:37:01

+2

你可以用任何类或对象方法来做到这一点。例如'request $ ua $ request;'可以用来代替'$ ua-> request($ request)'。大多数人只将它用于'new'('new Class @ args'),因为他们喜欢预先使用C++或Java,而对于'print'('print $ fh $ stuff')出于历史原因。假设他们使用它。 – ikegami 2012-07-31 15:42:45

+2

而且不建议使用间接方法语法,因为它可能导致解析歧义。 – cjm 2012-07-31 16:01:12