use 5.10.0; use strict; no warnings; my @names = ("Acidovorax JS42", "Acidovorax sp. JS42"); my @db_names = ("Acidovorax sp. JS42", #data base of names in array "JS42 Acidovorax sp.", "JS42 sp. Acidovorax", "Acidovorax JS42", "JS53 sp. Acidovorax", "JS42 sp. Axidovorax", "JS42Acidovorax sp. " ); foreach (@names) { say; my %name; @name{+split} = (); foreach (@db_names) { my %copy = %name; delete $copy{$_} for split; say "\t$_ is ", (keys %copy ? "not a " : "a "), "match"; } } __END__ Acidovorax JS42 Acidovorax sp. JS42 is a match JS42 Acidovorax sp. is a match JS42 sp. Acidovorax is a match Acidovorax JS42 is a match JS53 sp. Acidovorax is not a match JS42 sp. Axidovorax is not a match JS42Acidovorax sp. is not a match Acidovorax sp. JS42 Acidovorax sp. JS42 is a match JS42 Acidovorax sp. is a match JS42 sp. Acidovorax is a match Acidovorax JS42 is not a match JS53 sp. Acidovorax is not a match JS42 sp. Axidovorax is not a match JS42Acidovorax sp. is not a match