1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use strict; use warnings; my %test = ( foo => 'bar', foo1 => 'bar1', foo2 => 'bar2', ); foreach my $temp (keys %test) { print "Bearbeite '$temp'\n"; delete $test{foo1}; }
Quoted:\>perl test.pl
Bearbeite 'foo'
Bearbeite 'foo2'
Bearbeite 'foo1'
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use strict; use warnings; my %test = ( foo => 'bar', foo1 => 'bar1', foo2 => 'bar2', ); my @keys = keys %test; foreach my $temp (@keys) { print "Bearbeite '$temp'\n"; delete $keys[2]; }
Quoted:\>perl test.pl
Bearbeite 'foo'
Bearbeite 'foo2'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ perl
use strict;
use warnings;
my %test = (
foo => 'bar',
foo1 => 'bar1',
foo2 => 'bar2',
foo3 => 'bar3',
);
my @keys = keys %test;
foreach my $temp (@keys) {
print "Bearbeite '$temp'\n";
delete $keys[2];
}
__END__
Bearbeite 'foo3'
Bearbeite 'foo'
Use of uninitialized value $temp in concatenation (.) or string at - line 12.
Bearbeite ''
Bearbeite 'foo1'
2012-08-15T16:34:32 pqwas hast du denn davon? erstens weisst du vorher nicht die reihenfolge der keys, und zweitens kriegst du dann ein Use of uninitialized value, wenn du das element ausgibst.
2012-08-15T19:33:21 flowdyDu kennst das Konstrukt while ( my ($key,$value) = each %hash ) {}? Das verwende ich standardmäßig, und das ist auch delete-stabil
perldocIf you add or delete elements of a hash while you're iterating over it, you may get entries skipped or duplicated, so don't. Exception: It is always safe to delete the item most recently returned by "each()"