Array leeren - warum geht's nicht?
Sven
- perl
0 Markus Pitha0 Sven
0 Matti Maekitalo0 Rolf Rost
Hello,
=================================
%bla = ("a","text", "b","text", "c","text");
print "vorher:\n";
while (($a, $b) = each(%bla)) { print "$a => $b\n"; }
map("undef", %bla);
print "\nnachher:\n";
while (($a, $b) = each(%bla)) { print "$a => $b\n"; }
=================================
Ausgabe:
vorher:
c => text
a => text
b => text
nachher:
c => text
a => text
b => text
Mit "delete" kommt genau das gleiche. Was ich jedoch gerne hätte, wäre ein geleertes Array. D.h. sowas:
vorher:
c => text
a => text
b => text
nachher:
c =>
a =>
b =>
Warum geht map() nicht? Was muss ich hier machen?
Gruß,
Sven
Hi,
erstens hast du kein Array, sondern einen Hash. Warum machst du es so kompliziert?
%bla = (); würde doch auch helfen.
Markus.
Hola,
erstens hast du kein Array, sondern einen Hash.
egal.
%bla = (); würde doch auch helfen.
Ja, aber dann gibt's die Elemente a, b, c nicht. ich hätte sie gerne leergeräumt, mehr nicht.
Gruß,
sven
use Mosche;
[alle Values in einem Hash undef setzen]
Du hast map falsch benutzt.
Lies "perldoc -f map":
%hash = map { ($_ => undef) } keys %hash;
Ist das gleiche wie:
foreach (keys %hash) {
$hash{$_} = undef;
}
map liefert einen neuen Array (bzw hier Hash) zurück und operiert nicht auf dem alten. Außerdem willst du nur die Schlüssel durchlaufen.
use Tschoe qw(Matti);
Hallo,
=
%bla = ("a","text", "b","text", "c","text");
while( ($k, $v) = each %bla){ print "$k \t $v \n" }
foreach my $k (keys %bla){ $bla{$k} = undef }
bezüglich map() siehe Matti's post.
Gruss, Rolf