Cockneyphil has asked for the wisdom of the Perl Monks concerning the following question:

If @allfiles = grep /^1021/,readdir THEDIR; selects all the files starting with "1021" How would I change it to select everything BUT those starting with "1021"

Replies are listed 'Best First'.
Re: Everything BUT
by marvell (Pilgrim) on Jun 12, 2002 at 15:18 UTC
    With a ! before the match.

    --
    Steve Marvell

      I also like curlies around the grep block - like this:
      @allfiles = grep { ! /^1021/ } readdir THEDIR;
      </code>
      -- Joost downtime n. The period during which a system is error-free and immune from user input.

        I also like curlies around the grep block

        Without curlies, it is not a block. The non-block version of grep is much faster.

        2;0 juerd@ouranos:~$ perl -MBenchmark=cmpthese -e'cmpthese(-1, { block + => sub { grep { /[13579]/ } 0..9 }, nonblock => sub { grep /[13579]/ +, 0..9 } })'
        Benchmark: running block, nonblock, each for at least 1 CPU seconds...
             block:  2 wallclock secs ( 1.06 usr +  0.00 sys =  1.06 CPU) @ 44436.79/s (n=47103)
          nonblock:  0 wallclock secs ( 1.01 usr +  0.00 sys =  1.01 CPU) @ 141940.59/s (n=143360)
                     Rate    block nonblock
        block     44437/s       --     -69%
        nonblock 141941/s     219%       --
        

        - Yes, I reinvent wheels.
        - Spam: Visit eurotraQ.
        

        Me too, I never leave home without them.

        In fact, I hardly ever us the comma form of grep or map.

        --
        Steve Marvell