我會很高興,如果有人可以告訴我,以我的錯誤:的Perl「不是一個數組引用」錯誤
my %mymap;
@mymap{"balloon"} = {1,2,3};
print $mymap{"balloon"}[0] . "\n";
我會很高興,如果有人可以告訴我,以我的錯誤:的Perl「不是一個數組引用」錯誤
my %mymap;
@mymap{"balloon"} = {1,2,3};
print $mymap{"balloon"}[0] . "\n";
如果您用過「使用嚴格的;使用警告;'在你的代碼的頂部,你可能有更好的錯誤信息。
你在做什麼是創建一個名爲我的地圖散列。散列將數據存儲爲鍵=>值對。 然後,您將數組引用分配給密鑰氣球。你剪斷小碼有兩個問題: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";
$mymap{'balloon'}
是哈希不是陣列。表達{1,2,3}
創建一個哈希:
{
'1' => 2,
'3' => undef
}
你把它分配給對應列表鍵一個片的%mymap
:('balloon')
。由於密鑰列表爲1項和值列表是一個項目,你做同樣的事情
$mymap{'balloon'} = { 1 => 2, 3 => undef };
如果您用過strict
和warnings
它會避讓你在你的錯誤。我:
Scalar value @mymap{"balloon"} better written as $mymap{"balloon"} at - line 3.
Odd number of elements in anonymous hash at - line 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];
好了,一些東西......
%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]
等
N.B.在索引之間,您可以按照['perldoc perlreftut'](http://perldoc.perl.org/perlreftut.html#Arrow-Rule)中的「箭頭規則」省略箭頭運算符' - >'來表示'$ mymap {ballon} [0]' –
是的,我個人更喜歡使用箭頭,因爲(IMO)他們允許在數據中更容易的圖層劃分。自TIMTOWTDI以來,我做了一個編輯。 – 2011-08-17 15:05:52
我明白甚至支持這一點,但是,一旦你有幾個索引排隊了,大多數讀者應該看到它是一個嵌套的數據結構,並與它相適應。順便說一句,當我所包含的數據是我正在調用的coderef時,我通常仍然使用箭頭。 –
你真的需要閱讀的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)。 –
此外,還有像['Modern Perl'](http://onyxneon.com/books/modern_perl/)可用的書籍。請學習語言基礎知識,並在有錯誤時回到我們,我們將很樂意提供幫助! –