use strict; use warnings; use Data::Dumper; my @packages = sort { $b <=> $a } (2,2,3,4,5,6,7); print Dumper(@packages); my @bins; while (@packages) { my @temp = shift @packages; while (@packages) { last if sum(@temp) + $packages[-1] > 10; my $next = pop @packages; push @temp, $next; } push @bins, [@temp]; } print Dumper(\@bins); sub sum { my $s = 0; $s += $_ for @_; return $s; }