(0) (0 1) (0 1 2) (1 2 3) (6 4 5) #### ((0 1 2 3) (4 5 6) #### use Set::Scalar; for $i ( 0 .. 4) {$cluster[$i] = Set::Scalar->new;} $cluster[0]->insert(0); $cluster[1]->insert(0,1); $cluster[2]->insert(0,1,2); $cluster[3]->insert(1,2,3); $cluster[4]->insert(5,6,4); for $i ( 0 .. 4) { for $j ( $i+1 .. 4) { if ($cluster[$i]->is_properly_intersecting($cluster[$j])) {$cluster[$i]=$cluster[$i]+$cluster[$j];$cluster[$j]->clear;} }} #### (0) (0 1 2 3) (0 1 2) () (4 5 6)