in reply to Comparing Approximate Items

You could use Text::Levenshtein

It is an edit distance, i.e. it is a measure of the degree of proximity between two strings.
So for example, distance("foo","four") is 2 because you need an edit "SUBSTITUTE" and an edit "INSERT".

As algorithm I suggest the 'Stable Marriage Problem', a matching algorithm to best fit the "marriage preferences" of two sets.