Re: Perl: Reference found where even-sized list expected
Christian Boltz <suse-/[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
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]
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
suse-programming-unsubscribe-IBi9RG/[email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: suse-programming-help-IBi9RG/[email protected]