in reply to Why does the first $c evaluate to the incremented value in [$c, $c += $_] ?

1. Modifying a variable you use several times within an expression is begging for problems. Don't!

2. You can't use a state variable for something like this! As soon as that line gets evaluated twice, you end up in deep sh^B^Bproblems:

use feature qw(say state); my @widths = (2, 6, 5, 7); foreach (1 .. 2) { my @partitions = map { state $c = 0; [$c, $c += $_] } @widths; say '[', join(', ', @$_), ']' for @partitions; print "\n"; }

State variables are too global. The simplest solution I can think of is:

use feature qw(say); my @widths = (2, 6, 5, 7); foreach (1 .. 2) { my @partitions = do { my $c = 0; map { $c += $_; [$c - $_, $c] } @ +widths}; say '[', join(', ', @$_), ']' for @partitions; print "\n"; }
or
use feature qw(say); my @widths = (2, 6, 5, 7); foreach (1 .. 2) { my @partitions = do { my $c = 0; map { my $old = $c; [$old, $c+=$_ +] } @widths}; say '[', join(', ', @$_), ']' for @partitions; print "\n"; }

Jenda
Enoch was right!
Enjoy the last years of Rome.