Perl - Warum führt das Durchlaufen eines Hashs mit seinen Schlüsseln und das Drucken jedes Wertes zu einer Warnung, die nicht initialisiert ist?

7

Immer wenn ich einen Hash über seine Schlüssel wiederhole und dann jeden Wert drucke, erhalte ich die Warnung "Verwendung nicht initialisierter Werte in der Verkettung (.) oder Zeichenkette ...". Auch wenn der Hash im Vorfeld klar initialisiert wird. Die Ausgabe, die ich möchte, ist gedruckt, aber ich möchte immer noch wissen, warum dies zu einer Warnung führt, insbesondere wenn der Zugriff auf einen Wert direkt (außerhalb einer Schleife) ohne Warnungen funktioniert.

%Vor%

Betrachten Sie den obigen Code. Ich denke Perl sieht einen Unterschied zwischen dem ersten und dem zweiten Druck. Aber warum? Warum gibt es einen Unterschied zwischen dem Abrufen des Werts eines Hash außerhalb der Schleife und dem Abrufen des Werts eines Hasens innerhalb einer Schleife?

Danke!

    
Gx1sptDTDa 11.01.2013, 09:27
quelle

3 Antworten

17

Die Verwendung eines Hash im Listenkontext ergibt sowohl Schlüssel als auch Werte. Daher iteriert die Zeile foreach my $key (%fruit) über Schlüssel, Wert, Schlüssel, Wert ...

Was Sie brauchen, ist foreach my $key (keys %fruit) .

    
Moritz Bunkus 11.01.2013, 09:31
quelle
2

Es sollte foreach my $key ( keys %fruits ) sein. Ich denke, das ist genau das, was Sie wirklich tun wollen.

    
slayedbylucifer 11.01.2013 09:46
quelle
2

Verwenden Sie keys in der for -Schleife. z.B. foreach my $key (keys %fruit) ...

    
perlmonk 11.01.2013 09:37
quelle

Tags und Links