#!/usr/bin/perl -- use strict; use warnings; use Data::Dump; my @S = do { open my($data), '<', \q{b c a a c d d e b}; map { [ split ] } readline $data; }; dd \@S; for my $QT ( [qw[ a b c d ]], [qw[ b e d ]] ){ dd $QT; for my $triplet ( @S ){ my %Pie; undef @Pie{@$QT}; delete @Pie{ @$triplet }; #~ warn scalar keys %Pie ; #~ warn scalar @$QT; print "@$triplet\n" if keys(%Pie) <= ( @$QT - @$triplet ) ; } } __END__ [["b", "c", "a"], ["a", "c", "d"], ["d", "e", "b"]] ["a" .. "d"] b c a a c d ["b", "e", "d"] d e b