2017-04-08 208 views
2

所以,這是行不通的,我不知道爲什麼。我嘗試了各種可能的變化。但沒有任何工作。我已經準備好採取電鋸到我的服務器,但希望你能阻止:在哈希存儲陣列

sub getQuestMarkers { 
    #database stuff 
    ... 
    my %package; 
    while(my ($key, $lat, $lng) = $sth->fetchrow_array()) { 
    $package{$key} = ($lat,$lng); 
    } 

    ... 
    return %package; 
} 

my %markers = getQuestMarkers(); 
while(my($key, $value) = each %markers) { 
    print "$key: @value - $value[0] $value[1]\n"; 
} 
+2

['的perldoc perlop'](http://perldoc.perl.org/perlop.html#Comma-Operator):「二進制','是逗號運算符在標量上下文中評估其左邊的參數,將引發值了,然後評估其右側參數和返回該值。這就象C的逗號操作符。」 – melpomene

+3

總是以'use strict;使用警告;'。這將告訴你,'@ value'不存在(它沒有任何地方聲明)。 – melpomene

回答

3

使用括號[ ]創建一個數組引用,而不是括號();

書面,你的代碼扔掉的第一個值$lat。把它寫這樣的而不是:

$package{$key} = [$lat,$lng]; 

可以拉出值是這樣的:

my ($lat,$lng) = @{ $package{$key} }; 

在代碼中,你可以打印出的價值觀提領他們:

print "$key: " . $value->[0] . " " . $value->[1] . "\n"; 

看看perldoc perlreftut

+0

太感謝你了!這幾天讓我感到沮喪。 – Ratstail91