[perl] Listenelement löschen


stso

Mitglied
Hallo,
ich will eigentlich nur ein Element aus einer Perl- Listen Variable (@) löschen.
Es gibt ja die "build in" Funktion "delete" diese liefert bei mir folgende Ergebnisse:

Code:
my @oliste = (1,2,3,4);

my @liste1 = @oliste;
delete $liste1[0];	# ->(undef,2,3,4)	(1)

my @liste2 = @oliste;
delete $liste2[1];	# ->(1,undef,3,4)	(2)

my @liste3 = @oliste;
delete $liste3[2];	# ->(1,2,undef,4)	(3)

my @liste4 = @oliste;
delete $liste4[3];	# ->(1,2,3)	(4)
Wie bei (1),(2) und (3) wird das Listenelemnt nicht wirklich gelöscht sondern nur der Wert mit "undef" überschrieben. Was ja eigentlich auch wie folgt gehen würde:

Code:
$liste1[0] = undef;
Nur bei (4) hat er das Element wirklich entfernt und nicht nur den Wert überschrieben.
Ich will aber die Elemente überall löschen und nicht nur mit undef überschreiben.
Für den ersten Fall (1) könnte ich zwar auch shift nehmen aber in der Regel liegen die Listenelement die ich entfernen möchte nicht am Anfang oder am Ende der Listenvariablen. Wie kann ich Listenelemnte wirklich entfernen?

Auf die Verwendung von "tie" oder externen Modulen würde ich gern verzichten
 

stso

Mitglied
Hallo stso,
das geht mit der "build in"- Funktion "splice()". Willst du zum Beispiel das dritte Element aus deiner Liste löschen kannst du das so machen:

Code:
my @oliste = (1,2,3,4);
my @eliste = splice(@oliste,2,1);	# (1,2,4)
In @eliste kannst du das entfernte Element vorfinden.
Denk nächstes mal vorher nach! ;)