2017-04-08 21 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