use Array::Lookup; my @required_items = qw(apple orange pear); @collections = ( [ 'apple', 'pear' ], ['banana'] ); foreach my $collection (@collections) { foreach my $required_item (@required_items) { lookup $required_item, $collection, \¬found; } } sub notfound { my $required_item = shift; my $collection = shift; push @{$collection}, $required_item; } foreach my $collection (@collections) { print "@{$collection}\n"; }