2013-10-10 119 views
0

我有一個Perl哈希數組聲明如下:在Perl訪問數組哈希

my %updatevars = (datapoints => []); 

我後來試圖將元素添加到它:

push($updatevars{'datapoints'}, [$updatestart+$i, $bandwidth]); 

我得到這個錯誤:

Type of arg 1 to push must be array (not hash element) at dirlist.pl line 61, near "])"

回答

6

散列(和數組)只能包含標量。這就是爲什麼我們必須將數組引用(和散列)。 $updatevars{datapoints}包含對數組的引用。因此,你需要使用

push @{ $updatevars{datapoints} }, [ $updatestart+$i, $bandwidth ]; 

注意,作爲push改爲還接受引用您的代碼將在5.14+工作。 (然而,這種改變「被認爲是高度實驗性的」,所以你也應該在更新的版本中使用上述代碼。)

2

試試這個:

通過將 @{}在前面

由於push帶有一個數組和$updatevars{'datapoints'}是數組引用,則必須解除引用它。

3

$updatevars{'datapoints'}是一個數組ref,如您所分配的:[]push將數組作爲參數,而不是數組引用。所以,你需要提領您參考:

push @{ $updatevars{'datapoints'} }, ... 

在Perl v5.14,您可以使用一個參考,如文檔中指出。但這聽起來不像是一種推薦的做法。

Starting with Perl 5.14, "push" can take a scalar EXPR, which must hold a reference to an unblessed array. The argument will be dereferenced automatically. This aspect of "push" is considered highly experimental. The exact behaviour may change in a future version of Perl.