David B
David B

Reputation: 30018

What is the 'right' way of deleting array elements in Perl?

I have an array containing a set of elements. The order of elements is irrelevant - I use an array since it's the simplest data structure I know in Perl.

my @arr = ...
while (some condition) {
    # iterate over @arr and remove all elements which meet some criteria
    # (which depends on $i)
}

I know of splice() but I think it's not good using it while iterating. delete for array elements seems deprecated. Perhaps use grep on @arr into itself (@arr = grep {...} @arr)?

What is the best practice here?

Perhaps use a hash (although I don't really need it)?

Upvotes: 5

Views: 1599

Answers (2)

Eugene Yarmash
Eugene Yarmash

Reputation: 150188

According to the docs, calling delete on array values is deprecated and likely to be removed in a future version of Perl.

Alternatively, you can build a list of needed indices and assign the slice to the original array:

@arr = @arr[ @indices ];

You can read more about slices in perldata.

Upvotes: 7

DVK
DVK

Reputation: 129559

Your idea of using grep is good

@arr = grep { cond($i++); } @arr;

Upvotes: 7

Related Questions