use Modern::Perl qw/2015/; my %data; # First we transform and load the data into a hash while () { chomp; my $data = $_; s/([^9 ])/[$1X]/g; s/9/[0129]/g; s/X/9/g; $data{$_} = $data; } #Then we check if records with missing data are unique for my $testrecord ( keys %data ) { next unless $data{$testrecord} =~ m/9/; for my $record ( keys %data ) { next if $data{$record} eq $data{$testrecord}; #don't check yourself if ( $data{$record} =~ m/$testrecord/ ) { delete $data{$testrecord}; last; } } } say $data{$_} for keys %data; __DATA__ 2 2 0 1 0 2 2 0 2 1 0 2 1 1 0 0 1 1 1 0 2 2 0 0 0 2 9 0 2 1 0 2 0 1 0 2 2 0 9 0 2 2 9 2 2 #### 0 1 1 1 0 0 2 0 1 0 2 2 0 1 0 2 2 0 0 0 2 2 0 2 1 0 2 1 1 0 2 2 9 2 2