Keep only list values that match a condition.

grep-filter Grep returns the list items that pass a test. The original list is unchanged.

Grep Filter

minimum
grep_filter.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $minimum = 3;
my @scores = (2, 3, 5, 8);
my @kept = grep { $_ >= $minimum } @scores;
my $count = scalar @kept;
my $joined = join(",", @kept);

print "minimum=$minimum\n";
print "count=$count\n";
print "kept=$joined\n";
use strict;
use warnings;

my $minimum = 5;
my @scores = (2, 3, 5, 8);
my @kept = grep { $_ >= $minimum } @scores;
my $count = scalar @kept;
my $joined = join(",", @kept);

print "minimum=$minimum\n";
print "count=$count\n";
print "kept=$joined\n";
  1. $minimum ← 3, @scores ← 4, @kept ← 3, $count ← 3, $joined ← 3,5,8

    4my $minimum→ 3 = 3; #@minimum=55my @scores→ 4 = (2, 3, 5, 8);6my @kept→ 3 = grep { $_ >= $minimum } @scores4;7my $count→ 3 = scalar @kept3;8my $joined→ 3,5,8 = join(",", @kept3);910print "minimum=$minimum3\n";11print "count=$count3\n";12print "kept=$joined3,5,8\n";
    outputminimum=3
    count=3
    kept=3,5,8
  1. $minimum ← 5, @scores ← 4, @kept ← 2, $count ← 2, $joined ← 5,8

    4my $minimum→ 5 = 5;5my @scores→ 4 = (2, 3, 5, 8);6my @kept→ 2 = grep { $_ >= $minimum } @scores4;7my $count→ 2 = scalar @kept2;8my $joined→ 5,8 = join(",", @kept2);910print "minimum=$minimum5\n";11print "count=$count2\n";12print "kept=$joined5,8\n";
    outputminimum=5
    count=2
    kept=5,8