A for loop can walk across a small range of numbers.

range A range like `1 .. 3` produces each number between the endpoints.

For Range Loop

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

my $max_value = 4;
my $sum = 0;
my $last = 0;

for my $number (1 .. $max_value) {
    $sum = $sum + $number;
    $last = $number;
}

print "max_value=$max_value\n";
print "last=$last\n";
print "sum=$sum\n";
use strict;
use warnings;

my $max_value = 2;
my $sum = 0;
my $last = 0;

for my $number (1 .. $max_value) {
    $sum = $sum + $number;
    $last = $number;
}

print "max_value=$max_value\n";
print "last=$last\n";
print "sum=$sum\n";
use strict;
use warnings;

my $max_value = 5;
my $sum = 0;
my $last = 0;

for my $number (1 .. $max_value) {
    $sum = $sum + $number;
    $last = $number;
}

print "max_value=$max_value\n";
print "last=$last\n";
print "sum=$sum\n";
  1. $max_value ← 4, $sum ← 0, $last ← 0

    4my $max_value→ 4 = 4; #@max_value=2, 55my $sum→ 0 = 0;6my $last→ 0 = 0;
  2. $sum ← 1, $last ← 1

    pass 1 of 4
    8for my $number1 (1 .. $max_value4) {9    $sum→ 1 = $sum + $number1;10    $last→ 1 = $number1;11}
    All 4 passes — pass 1 is the card above
    pass$number$sum$last
    110 10 1
    221 31 2
    333 62 3
    446 103 4
  3. print "max_value=$max_value ";

    13print "max_value=$max_value4\n";14print "last=$last4\n";15print "sum=$sum10\n";
    outputmax_value=4
    last=4
    sum=10
  1. $max_value ← 2, $sum ← 0, $last ← 0

    4my $max_value→ 2 = 2;5my $sum→ 0 = 0;6my $last→ 0 = 0;
  2. $sum ← 1, $last ← 1

    pass 1 of 2
    8for my $number1 (1 .. $max_value2) {9    $sum→ 1 = $sum + $number1;10    $last→ 1 = $number1;11}
  3. $sum ← 3, $last ← 2

    pass 2 of 2
    8for my $number2 (1 .. $max_value2) {9    $sum→ 3 = $sum + $number2;10    $last→ 2 = $number2;11}
  4. print "max_value=$max_value ";

    13print "max_value=$max_value2\n";14print "last=$last2\n";15print "sum=$sum3\n";
    outputmax_value=2
    last=2
    sum=3
  1. $max_value ← 5, $sum ← 0, $last ← 0

    4my $max_value→ 5 = 5;5my $sum→ 0 = 0;6my $last→ 0 = 0;
  2. $sum ← 1, $last ← 1

    pass 1 of 5
    8for my $number1 (1 .. $max_value5) {9    $sum→ 1 = $sum + $number1;10    $last→ 1 = $number1;11}
    All 5 passes — pass 1 is the card above
    pass$number$sum$last
    110 10 1
    221 31 2
    333 62 3
    446 103 4
    5510 154 5
  3. print "max_value=$max_value ";

    13print "max_value=$max_value5\n";14print "last=$last5\n";15print "sum=$sum15\n";
    outputmax_value=5
    last=5
    sum=15

Add the Range

  1. $max_value starts at 4.
  2. The range 1 .. $max_value gives 1, 2, 3, and 4.
  3. Each pass adds the number to $sum.
  4. $last ends as 4 and $sum ends as 10. | Number | Running sum | | --- | --- | | 1 | 1 | | 2 | 3 | | 3 | 6 | | 4 | 10 |

Exercise: for_range.pl

Use a for range loop to add 1 through a maximum value and print last and sum