reduce#

Collapse a list to a single value by repeated pairwise combination.

תקציר#

my $result = reduce { BLOCK } @list;
my $sum    = reduce { $a + $b } 1..10;       # 55
my $max    = reduce { $a > $b ? $a : $b } @xs;

The block is called in scalar context with $a set to the running accumulator and $b set to the next element. On the first call, $a and $b are the first two elements; on each subsequent call, $a is whatever the previous call returned.

מה מוחזר#

The value of the last block invocation. If the list is empty, undef is returned. If the list contains exactly one element, that element is returned and the block is not called.

דוגמאות#

my $concat = reduce { "$a,$b" } 'a'..'c';    # 'a,b,c'
my $best   = reduce { $a->score > $b->score ? $a : $b } @players;
my $total  = reduce { $a + length $b } 0, @strings;   # sum of lengths
## Guarantee a numeric identity so an empty @values doesn't yield undef:

my $sum = reduce { $a + $b } 0, @values;

הבדלים מן ה-upstream#

Fully compatible with upstream.

ראו גם#

  • reductions - like reduce, but also keeps the intermediate values.

  • sum / product / min / max - specialised, faster forms.

  • first / any / all - element-test reductions over $_.