5

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)?

1

2 Answers 2

7

Your idea of using grep is good

@arr = grep { cond($i++); } @arr;
Sign up to request clarification or add additional context in comments.

Comments

7

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.