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
In Section
Seekers of Perl Wisdom