Perl grep
最后修改于 2023 年 8 月 24 日
Perl grep 教程展示了如何使用 Perl 的 grep 函数过滤值。
grep 函数会为列表中的每个元素评估一个块或一个表达式,并返回其中表达式评估为 true 的那些元素的列表。它将 $_ 局部设置为每个元素。在标量上下文中,它返回表达式为 true 的次数。
Perl grep 简单示例
我们从一个简单的示例开始。
simple.pl
#!/usr/bin/perl
use v5.34.0;
use warnings;
my @vals = (-3, -1, 0, 3, -4, 2, 3, 4, -7);
my @res = grep { $_ < 0 } @vals;
say "@res";
my $n = grep { $_ < 0 } @vals;
say "there are $n negative values";
示例使用 grep 处理整数列表。
my @res = grep { $_ < 0 } @vals;
say "@res";
这里我们过滤掉所有负值。
my $n = grep { $_ < 0 } @vals;
say "there are $n negative values";
在标量上下文中,我们得到与给定条件匹配的元素数量。
$ ./simple.pl -3 -1 -4 -7 there are 4 negative values
Perl grep 正则表达式
正则表达式可用于过滤数据。
digits.pl
#!/usr/bin/perl
use v5.34.0;
use warnings;
my @vals = ("sky", 0, -1, "cup", "breed", "345", 12);
my @res = grep /\d/, @vals;
say "@res";
在此示例中,我们使用 \d 正则表达式从列表中过滤出所有数字。
$ ./digits.pl 0 -1 345 12
在下一个示例中,我们 grep 一个单词列表。
words.pl
#!/usr/bin/perl use v5.34.0; use warnings; my @words = qw/sky war cup cloud abyss water car book note falcon/; my @res = grep /^[w,c]/, @words; say "@res"; my @res2 = grep /^...$/, @words; say "@res2";
我们找出所有以 'w' 或 'c' 开头的单词,以及所有恰好有三个字符的单词。
$ ./words.pl war cup cloud water car sky war cup car
Perl grep 文件
我们可以将 grep 与文件句柄一起使用。
words.txt
sky water rock falcon cloud war nice cup wrong
我们有一个小的文本文件。
fhandle.pl
#!/usr/bin/perl
use v5.34.0;
use warnings;
open my $fh, "<", "words.txt"
or die "cannot open file $!";
my @res = grep /^w/, <$fh>;
say join "", @res;
close $fh;
我们 grep 文件句柄以查找所有以 'w' 开头的单词;
$ ./fhandle.pl water war wrong
在本文中,我们使用了 Perl 的 grep 函数。
作者
列出 所有 Perl 教程。