| Home » Howtos » Perlfunc » Grep function |
The grep function is used to filter lists. The basic syntax is
@out = grep { CODE } @in;
where CODE is some Perl code. For each element of @in, CODE is
executed with $_ set to the element. If the code returns a true value, the
element is placed in the output list; otherwise it is discarded.
Say you have a list of strings, and want to keep only those with less than 8 characters.
#!/usr/bin/perl
use strict;
use warnings;
my @strs = qw(potatoes lemons apricots apples bananas ostriches flamingoes);
my @short_strs = grep { length $_ < 8 } @strs;
for my $str (@short_strs) {
print "$str\n";
}
This produces the output:
lemons
apples
bananas
What if you have a list of files, and want only those ending in .html? We
can use grep together with a regular expression:
#!/usr/bin/perl
use strict;
use warnings;
my @files = qw(index.html test.html test.txt Makefile home.html help.doc README.txt);
my @html_files = grep { /\.html$/ } @files;
for my $file (@html_files) {
print "$file\n";
}
This produces the output:
index.html
test.html
home.html
perldoc -f grep