in reply to are they all there?

Since you didn't say how your collections are stored, I deliberately decide they are stored in an array of anonymous arrays. The must-be items are stored in an array.

#!/usr/bin/perl # sample data my @required = a..f; my @collections = ([b..g],[c..h],[d..i],[e..j],[f..k]); my $elems = scalar @required; # number of elements foreach my $coll (@collections) { # foreach collection my %missing = (); # assume that all @missing{@required} = (1) x $elems; # items are missing # reset missing flag for elements in collection # and push the missing ones onto the collection $missing{$_} = 0 for grep {exists $missing{$_}} @$coll; push @$coll, grep {$missing{$_}} @required; } foreach my $coll (@collections) { print join (',', @$coll), "\n"; } __END__ output: b,c,d,e,f,g,a c,d,e,f,g,h,a,b d,e,f,g,h,i,a,b,c e,f,g,h,i,j,a,b,c,d f,g,h,i,j,k,a,b,c,d,e

Something between jhourcle's and jwkrahn's solution.

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}