grepEXPR
,LIST
grepBLOCK
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