Thread Löschen von Hash Elementen-Paar in foreach-Schleife (9 answers)
Opened by yippi at 2014-01-21 01:39

Linuxer
 2014-01-21 13:18
#173093 #173093
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
naja, dafür muss man sich vor Augen führen, was da eigentlich genau passiert.

Bei diesem for(each) wird eine Liste der Schlüssel ermittelt und sortiert und durch diese Liste wird iteriert.
Diese Liste wird einmal zum Start der Schleife generiert und dann bleibt sie so. Wenn während der Schleifendurchläufe der Hash verändert wird, ist das der Schleife egal; sie hat ihre Liste, die sie anfangs einmal generiert hat.

Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use strict;
use warnings;

my %hash;

$hash{aa}='test1';
$hash{bb}='test2';
$hash{cc}='test1';
$hash{dd}='test3';

my $counter = 1;
foreach my $key (sort keys %hash) {
        # schon beim ersten Durchlauf wird der Hash geleert; keine Keys mehr!
        %hash = ();

        print $counter++, "\n";
}

__END__
Resultat:
1
2
3
4


4 Ausgaben für 4 keys, weil die initial einmal ermittelt wurden, bevor der Hash verändert wird.


Edit:
In Deinem Fall ist der Key eben noch bekannt, weil in der Liste der äußeren Schleife enthalten; beim Zugriff auf das Hash-Element mit diesem Key ist aber kein value mehr vorhanden, weil der (zusameen mit dem key) durch die innere Schleife gelöscht wurde.
Last edited: 2014-01-21 13:34:12 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Löschen von Hash Elementen-Paar in foreach-Schleife