2017-04-08 2 views
2

Also, das funktioniert nicht, und ich habe keine Ahnung warum. Ich habe jede mögliche Variante ausprobiert. Aber nichts funktioniert. Ich bin bereit, eine Kettensäge auf meinen Server zu nehmen, aber hoffentlich können Sie verhindern, dass:Speichern eines Arrays in einem Hash

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):" Binary ',' ist der Komma-Operator. Im skalaren Kontext wertet er sein linkes Argument aus und wirft das. " Wert weg, dann wertet es das rechte Argument aus und gibt diesen Wert zurück. Das ist genau wie der Kommaoperator von C. " – melpomene

+3

Beginnen Sie immer mit 'use strict; Verwenden Sie Warnungen; '. Das hätte dir gesagt, dass '@ value' nicht existiert (es wurde nirgendwo deklariert). – melpomene

Antwort

3

Verwenden Klammern [ ] ein Array-Referenz zu erzeugen, nicht Pars ();

Wie beschrieben, wirft Ihr Code den ersten Wert $lat. Schreiben Sie es wie folgt statt:

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

Sie können die Werte wie folgt herausziehen:

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

In Ihrem Code, können Sie sie durch dereferencing aus den Werten drucken konnten:

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

Schauen Sie sich perldoc perlreftut an.

+0

Vielen Dank! Das hat mich tagelang frustriert. – Ratstail91

Verwandte Themen