in reply to Re^3: deleting a specific element from an array
in thread deleting a specific element from an array

Of course, if you only wanted to delete exact matches, you could extend ikegami's solution like so:

@array = grep !/^($dels)$/, @array;

Now, 'apple' will no longer result in 'apple pie' being deleted.


--
"Language shapes the way we think, and determines what we can think about."
-- B. L. Whorf

Replies are listed 'Best First'.
Re^5: deleting a specific element from an array
by kyle (Abbot) on Dec 03, 2008 at 03:18 UTC

    Now, 'apple' will no longer result in 'apple pie' being deleted.

    ...but "apple\n" still gets tossed. Use \z to match the literal end-of-string and $ for end-of-string-or-newline-you-know-whatever.

      Why, no - it doesn't.

      ben@Tyr:~$ perl -wne'print length, ": $_" if /^(apple)$/' apple 6: apple

      '$' in regular expressions matches before '\n'.


      --
      "Language shapes the way we think, and determines what we can think about."
      -- B. L. Whorf
        How does that contradict kyle? "apple\n" got matched even though it's not exactly "apple".

        I think your code actually proves my point, not yours.

        use Data::Dumper; my @array=('water','wine','applepie','beer','orange juice',"apple\n"); my @dels=('apple','orange'); my $dels = join '|', map quotemeta, @dels; @array = grep !/^($dels)$/, @array; print Dumper \@array; __END__ $VAR1 = [ 'water', 'wine', 'applepie', 'beer', 'orange juice' ];

        It removes both "apple" and "apple\n"—even though "apple\n" was not one of the @dels. If you change the $ to \z in the regular expression, the "apple\n" comes through (and "apple" is still removed).