[Chapter 3] 3.2.72 grep
Author: Larry Wall, Tom Christiansen & Randal L. Schwartz
Date: 1999-07-02T01:50:40Z

#

| Chapter 3 Functions |

### 3.2.72 grep

    grep EXPR, LIST
    grep BLOCK LIST

This function evaluates `EXPR` or `BLOCK` in a Boolean context for each element of `LIST`, temporarily setting $_ to each element in turn. In list context, it returns a list of those elements for which the expression is true. (The operator is named after a beloved UNIX program that extracts lines out of a file that match a particular pattern. In Perl the expression is often a pattern, but doesn't have to be.) In scalar context, grep returns the number of times the expression was true.

Presuming `@all_lines` contains lines of code, this example weeds out comment lines:

    @code_lines = grep !/^#/, @all_lines;

Since $_ is a reference into the list value, altering $_ will modify the elements of the original list. While this is useful and supported, it can occasionally cause bizarre results if you aren't expecting it. For example:

    @list = qw(barney fred dino wilma);
    @greplist = grep { s/^[bfd]// } @list;

`@greplist` is now "`arney`", "`red`", "`ino`", but `@list` is now "`arney`", "`red`", "`ino`", "`wilma`"! Caveat Programmor.

See also map. The following two statements are functionally equivalent:

    @out = grep { EXPR } @in;
    @out = map { EXPR ? $_ : () } @in

3.2.71 goto |  | 3.2.73 hex