in reply to Compare each array element to the rest, sequentially

Since the distance between A and B is the same as distance between B and A, you are looking for unordered combinations of two words, so you presumably want to remove a word once is has been combined with all other words, so that you don't find the same pair again. Here is a quick simple example to make such combinations:
use strict; use warnings; my @array = sort {$a <=> $b} qw/ 23 45 12 4 8 7 5/; while (my $item = shift @array) { print "$item $_\n" for @array; }
This will print all combinations of the numbers in the list:
4 5 4 7 4 8 4 12 4 23 4 45 5 7 5 8 5 12 5 23 5 45 7 8 7 12 7 23 7 45 8 12 8 23 8 45 12 23 12 45 23 45
Just replace the print statement by the distance calculation (and the number in the original list by your words), and you're done. Just three lines of code.

Replies are listed 'Best First'.
Re^2: Compare each array element to the rest, sequentially
by NetWallah (Canon) on Dec 08, 2017 at 02:33 UTC
    Added a unique filter, in case the data contains duplicates:
    use strict; use warnings; my %uniq; my @array = sort {$a <=> $b} grep {$uniq{$_}++==0} qw/ 23 45 12 4 45 8 + 7 5/; while (my $item = shift @array) { print "$item $_\n" for @array; }
    (the number 45 is duplicated here, but only one appears in the output).

                    All power corrupts, but we need electricity.