#!/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