2012-07-31 111 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