http://qs321.pair.com?node_id=188688


in reply to Deleting elements from array questions

the problem is that there are still 10 elements if you just undef the match(es):

my @array = 1..10; print "@array\n"; my $item = 3; foreach my $element (@array) { undef $element if ($element eq $item); } print "@array\n"; print $#array + 1;

see, the array doesn't actually shrink. when you do a print $#array + 1 you still get a 10 (assuming there were 10 elements to start like there were here).

to get rid of the phantom element(s), you could use splice like this:

my @array = 1..10; print "@array\n"; my $item = 3; my @empties; my $count; foreach my $element (@array) { if ($element eq $item) { undef $element; push @empties, $count; } $count ++; } foreach (@empties) { splice (@array, $_, 1); } print "@array\n"; print $#array + 1;

hth,
--au