2013-07-11 54 views
-3

使用的示例內,讓以下列方式Perl程序開始:的Perl:調用一個模塊的方法[]

use strict; 
use warnings; 
use Time::HiRes; 

什麼是

my $request_start_epoch = [Time::HiRes::gettimeofday]; 

my $request_start_epoch = Time::HiRes::gettimeofday; 
之間的差

+0

你認爲什麼差別? – TLP

+1

'時間::高分辨率:: gettimeofday'返回兩個整數(從新紀元整秒,因爲目前第二年初微秒)在列表上下文在標量上下文和浮點數(秒以來的劃時代)。 – mob

+0

我冒昧地通過刪除構造函數代碼將該代碼歸結爲問題的核心。 – innaM

回答

4

前者在列表上下文中調用函數,組裝包含返回列表元素的匿名數組,並將$request_start_epoch設置爲對該數組的引用。

後者在標量上下文調用函數並存儲在$request_start_epoch其返回值。

這些都會是不同的;唯一的時間是相同的,如果函數在標量上下文中的行爲是將其列表上下文結果包含在匿名數組中並返回對其的引用。我從來沒有見過像這樣寫過的任何方法,但我確定某個地方有人在某個時候完成了它!

+0

我見過一些臉紅的濫用'wantarray'。 –

+0

@ruakh感謝您的解釋。我以某種方式得到了這樣的想法,對於這種情況下,前者更自然.. – ado

+0

雖然每cpan「gettimeofday返回一個2元素數組,從時代開始秒和微秒。」所以我會爲後來的 – ado

0

的括號[]轉換什麼是gettimeofday的返回的數組引用。在你的情況下,它將是一個單元數組。

創建數組引用。

$arr_ref = [ 1,2,3,4,5 ]; 

Deferencing它。

@{ $arr_ref }; 

訪問元素。

$ { $array_ref }[0] 
+3

我認爲編寫'@ $ arr_ref'和'$ arr_ref - > [0]'更爲常見。 – ruakh