Break a list transformation into clear named stages.

pipeline-steps A pipeline names each stage of a list operation. Small stages are easier to inspect than one long expression.

Pipeline Steps

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

my $minimum = 2;
my @values = (1, 2, 3, 4);
my @filtered = grep { $_ >= $minimum } @values;
my @doubled = map { $_ * 2 } @filtered;
my $summary = join("-", @doubled);

print "minimum=$minimum\n";
print "summary=$summary\n";
use strict;
use warnings;

my $minimum = 4;
my @values = (1, 2, 3, 4);
my @filtered = grep { $_ >= $minimum } @values;
my @doubled = map { $_ * 2 } @filtered;
my $summary = join("-", @doubled);

print "minimum=$minimum\n";
print "summary=$summary\n";
  1. $minimum ← 2, @values ← 4, @filtered ← 3, @doubled ← 3, $summary ← 4-6-8

    4my $minimum→ 2 = 2; #@minimum=45my @values→ 4 = (1, 2, 3, 4);6my @filtered→ 3 = grep { $_ >= $minimum } @values4;7my @doubled→ 3 = map { $_ * 2 } @filtered3;8my $summary→ 4-6-8 = join("-", @doubled3);910print "minimum=$minimum2\n";11print "summary=$summary4-6-8\n";
    outputminimum=2
    summary=4-6-8
  1. $minimum ← 4, @values ← 4, @filtered ← 1, @doubled ← 1, $summary ← 8

    4my $minimum→ 4 = 4;5my @values→ 4 = (1, 2, 3, 4);6my @filtered→ 1 = grep { $_ >= $minimum } @values4;7my @doubled→ 1 = map { $_ * 2 } @filtered1;8my $summary→ 8 = join("-", @doubled1);910print "minimum=$minimum4\n";11print "summary=$summary8\n";
    outputminimum=4
    summary=8