Thanks so much, I see the light now. This logic along with Mike's (RMGir) Algorithm::Bucketizer insight will get me all the way home.
I plan on building the total size for each of the "project_1" trees and pushing them into Algorithm::Bucketizer if they are < 4.2 gig. If not I will jump down one tree level from "project_1" and use a method similar to the one you show to create a bucket_like object that I can then insert into Algorithm::Bucketizer until I am out of data in the sub tree.
After all that, Algorithm::Bucketizer can optimize the distribution over the buckets with:
$b->optimize(algorithm => "brute_force");
With a smaller number if items in the buckets brute forcing the "Knapsack Problem 0-1" should not be too time consuming (thank god it is not fractional =).
I think this will cover all of my requirements.
Thanks so much JAS and Mike for pointing me in the right direction! =)
-Waswas