Thread select antwort als hash speichern
(7 answers)
Opened by Yato at 2008-09-08 15:39
Ich würde Dir aber empfehlen, Dich mal in das Thema Referenzen einzuarbeiten, dann wirst Du sehen, dass sich damit viel leichter und eleganter umgehen lässt. Wenn Du diesen Hash nur ein einziges Mal brauchst, ist es eigentlich egal. Sobald Du den aber vielleicht noch an ne andere Funktion übergeben willst oder so, bist Du mit Referenzen besser bedient.
Neue Dinge lernt man am leichtesten, wenn die Anwendung noch nicht übermäßig kompliziert ist und man sie eigentlich noch gar nicht unbedingt braucht. Hier mal das Beispiel von Linuxer ein wenig abgewandelt, in dem ich davon ausgehe, dass Du die Spalte "datum" ausgeben willst. Code (perl): (dl
)
1 2 3 4 5 my $cols = $query_handle->fetchrow_hashref; if( defined( $cols ) ) { print "Datum: $$cols{datum}\n"; } else { die( "No data found; Query error: ", $query_handle->err, "\n" ); } Solange Du keine komplexen Strukturen erstellen willst, solltest Du mit dem folgenden Grundwissen bzgl. Hashreferenzen auskommen: Code (perl): (dl
)
1 2 3 4 5 6 my %hash = ( key => "value" ); # Erstellen eines Hashs my $hashRef1 = \%hash; # Erstellen einer Referenz auf diesen Hash my $hashRef2 = { key => "value" }; # Erstellen einer Referenz auf einen neuen ("anoynmen") Hash print $hash{key}; # wie gewohnt print $$hashRef1{key}, $$hashRef2{key}; # Das $ ist erforderlich, wenn Du einen Wert dereferenzieren willst print keys( %$hashRef1 ), keys( %{$hashRef2} ); #äquivalente Schreibweisen, dereferenzieren des Hashs. Die Idee dabei ist, dass Du nicht mit den eigentlichen Hash weitergeben musst, sondern nur die Adresse, wo sich dieser befindet. Zum einen kannst Du so Daten in Subroutinen ändern, ohne sie danach wieder zurückgeben zu müssen. Zum anderen wird dadurch auch Speicher gespart, weil der Hash nicht mehrmals sondern nur einmal existiert. Über kurz oder lang wirst Du um Referenzen nicht rum kommen. |