start page | rating of books | rating of authors | reviews | copyrights

Programming Perl

Programming PerlSearch this book
Previous: 3.2.71 goto Chapter 3
Functions
Next: 3.2.73 hex
 

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


Previous: 3.2.71 goto Programming Perl Next: 3.2.73 hex
3.2.71 goto Book Index 3.2.73 hex