2011-08-17 44 views
3

我會很高興,如果有人可以告訴我,以我的錯誤:的Perl「不是一個數組引用」錯誤

my %mymap; 
@mymap{"balloon"} = {1,2,3}; 

print $mymap{"balloon"}[0] . "\n"; 
+2

你真的需要閱讀的Perl和Perl數據的一些文件結構:讀['perldoc perlintro'](http://p3rl.org/intro),['perldoc perldata'](http://p3rl.org/data),可能['perldoc perlreftut']](http:/ /p3rl.org/reftut)和['perldoc perldsc'](http://p3rl.org/dsc)。 –

+2

此外,還有像['Modern Perl'](http://onyxneon.com/books/modern_perl/)可用的書籍。請學習語言基礎知識,並在有錯誤時回到我們,我們將很樂意提供幫助! –

回答

4

如果您用過「使用嚴格的;使用警告;'在你的代碼的頂部,你可能有更好的錯誤信息。

你在做什麼是創建一個名爲我的地圖散列。散列將數據存儲爲鍵=>值對。 然後,您將數組引用分配給密鑰氣球。你剪斷小碼有兩個問題:1,你沒有解決的MyMap中的哈希,2。如果你想傳遞一個列表,你應該使用方括號:

my %mymap; 
$mymap{"balloon"} = [1,2,3]; 
print $mymap{"balloon"}[0] . "\n"; 

此打印「1」。

你也可以使用數組:

my @balloon = (1,2,3); 
print $balloon[0] . "\n"; 
6

$mymap{'balloon'}哈希不是陣列。表達{1,2,3}創建一個哈希:

{ 
    '1' => 2, 
    '3' => undef 
} 

你把它分配給對應列表鍵一個片的%mymap('balloon')。由於密鑰列表爲1項和值列表是一個項目,你做同樣的事情

$mymap{'balloon'} = { 1 => 2, 3 => undef }; 

如果您用過strictwarnings它會避讓你在你的錯誤。我:

Scalar value @mymap{"balloon"} better written as $mymap{"balloon"} at - line 3. Odd number of elements in anonymous hash at - line 3.

3

嗯,首先,總是use strict; use warnings;。如果你有,它可能會告訴你這裏有什麼問題。

這裏是你在你的程序做什麼:

my %mymap; # declare hash %mymap 
@mymap{"balloon"} = {1,2,3}; # attempt to use a hash key on an undeclared 
           # array slice and assign an anonymous hash to it 

print $mymap{"balloon"}[0] . "\n"; # print the first element of a scalar hash value 

爲它做你所期望的,這樣做:

my %mymap = ('balloon' => [ 1,2,3 ]); 
print $mymap{'balloon'}[0]; 
1

好了,一些東西......

%mymap是散列。 $mymap{"balloon"}是一個標量 - 即對應於密鑰"balloon"的散列值%mymap@mymap{"balloon"}是對所謂的哈希片的嘗試 - 基本上,您可以使用它們爲一組鍵分配一組值:@hash{@keys}[email protected]

所以,如果你想分配一個數組引用$mymap{"balloon"},你需要這樣的:

$mymap{"balloon"}=[1,2,3]

要訪問的元素,你可以使用->像這樣:

$mymap{"balloon"}->[0] #equals 1 
$mymap{"balloon"}->[1] #equals 2 
$mymap{"balloon"}->[2] #equals 3 

或者,你可以省略箭頭:$mymap{"balloon"}[0]

+2

N.B.在索引之間,您可以按照['perldoc perlreftut'](http://perldoc.perl.org/perlreftut.html#Arrow-Rule)中的「箭頭規則」省略箭頭運算符' - >'來表示'$ mymap {ballon} [0]' –

+0

是的,我個人更喜歡使用箭頭,因爲(IMO)他們允許在數據中更容易的圖層劃分。自TIMTOWTDI以來,我做了一個編輯。 – 2011-08-17 15:05:52

+1

我明白甚至支持這一點,但是,一旦你有幾個索引排隊了,大多數讀者應該看到它是一個嵌套的數據結構,並與它相適應。順便說一句,當我所包含的數據是我正在調用的coderef時,我通常仍然使用箭頭。 –

相關問題