Hallo David, hallo Leute, Am Mittwoch, 19. Januar 2005 19:12 schrieb David Haller:
Am Wed, 19 Jan 2005, Christian Boltz schrieb: [..]
foreach (sort(keys(%hash))) { $tmp = $_; print "$tmp\n"; %tmphash = $hash{$tmp}; [..] Wo liegt mein Fehler?
Das hat Michael schon geschrieben ;)
Ich vermute, dass die Zuweisung %tmphash = ... so nicht richtig ist, habe aber auch nach längerem Austesten und Lesen von man perlref nicht die richtige Syntax gefunden :-(
Die Fehlermeldung haette dich auf die Spur bringen koennen:
Hat sie ja grundsätzlich auch - aber meine Perl-Kenntnisse reichen eben (noch?) nicht für so Spezialfälle ;-)
Reference found where even-sized list expected at ./testcase.pl line 16.
Die Zuweisung an ein Hash "%foo = ..." erwartet eine Liste mit einer geraden Anzahl Elemente, z.B.: "= ( key1, val1, key2, val2)". Ein Hash ist in perl5 ja ein Sonderfall einer Liste.
Klar.
Du uebergibst aber nur die Referenz auf ein Hash, also einen Skalar.
Tja, und da bin ich irgendwo angestanden. Ich hatte vor meiner Mail auch schon genügend perldoc (-f ref, perlref) gewälzt. Ich war auch schon beim Stichwort "dereference" angekommen, habe aber nicht rausgefunden, wie genau ich das zu programmieren habe (Eine Funktion unref gibt es ja leider nicht). Dass da "einfach" ein %{...} außenrum muss, habe ich nirgends gefunden, auch nicht bei meinen vielen (teils recht "abenteuerlichen") Versuchen. Und wenn man dann eine knappe Stunde immer nur Fehlermeldungen aus derselben Codezeile sieht, fragt man lieber mal in der ML, bevor man noch 2 Stunden verbrät ;-) Inzwischen weiß ich ja die Lösung ;-)
Die Zweite Meldung ist dann nur der Folgefehler beim Zugriff auf $tmphash{$_}.
Klar ;-) Gruß Christian Boltz, Zufallssig! -- Danke für die sehr verständliche und umfassende Antwort, ich seh' jetzt sehr viel klarer (Böse Zungen sagen, ich hätte seit zwei Monaten 'mal wieder meine Brille geputzt ... ). [Ulrich Walter in suse-linux]