use strict; use warnings; my %properties; my @computers; while () { chomp; next if ! length; push @computers, $_; while () { chomp; last if ! length; push @{$properties{$_}}, $computers[-1]; } } for my $computer (@computers) { my @missing = grep {! grep {$_ eq $computer} @{$properties{$_}}} keys %properties; $computer = [$computer, [@missing]]; } print join "\n", map {"$_->[0]: @{$_->[1]}"} @computers; __DATA__ Computer1 KB893756 KB896423 KB899588 KB899591 KB921883 Computer2 KB893756 KB896422 KB896423 KB899591 KB917159 KB921883 Computer3 KB893756 KB896422 KB899588 KB899591 KB917159 KB921883 #### Computer1: KB896422 KB917159 Computer2: KB899588 Computer3: KB896423