use Modern::Perl; use Algorithm::Combinatorics qw /variations_with_repetition/; use List::Util qw /sum/; my @triangulars; push @triangulars, $_ * ( $_ + 1 ) / 2 for 0 .. 12; my $iterator = variations_with_repetition( \@triangulars, 3 ); my @results; $results[ sum @$_ ] = join ' + ', @$_ while $_ = $iterator->next; say "$_ = $results[$_]" for 0 .. 80;