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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.