in reply to Testing if an array contains a value and then deleting it in most efficient way

  1. Use a hash.

  2. @array = grep $_ != $value, @array;

  3. Or a fairly efficient method:

    for my $i ( 0 .. $#array ) {
        if ( $array[ $i ] == $value ) {
            @array[ $i, -1 ] = @array[ -1, $i ];
            $#array--;
            last;
            }
        }


  1. Update: after my naive attempt at efficiency and some benchmarking this works better:

    my $i
    for ( @array ) {
        if ( $_ == $value ) {
            $i = $_;
            last;
            }
        }
    splice @array, $i, 1;