#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; my @want = (11, 9, 10); #~ sum(0, 3, 8), #~ 9, #~ sum(5, 2, 0, 2, 1) my @bad_ari = (0, 3, 8, 9, 5, 2, 0, 2, 1); my $min = 5; # minimal "goodness" my @partition = []; for my $val ( @bad_ari ){ push @{ $partition[-1] }, $val; if( $val >= $min ){ push @partition, []; } } dd( \@partition ); ## [[0, 3, 8], [9], [5], [2, 0, 2, 1]] __END__