my @items = qw( loads of variable size items here ); while (@items) { push @tapes, remove_from(\@items); } sub remove_from { my $arrayref = shift; my $taperef = []; # Knapsack algorithm goes here # ... # Whatever we put in $taperef is removed from $arrayref # ... return $taperef; }