#!/usr/bin/perl use strict; use IO::All; use warnings; use Data::Dumper; use Text::Levenshtein qw(distance); my @words = io($ARGV[0])->chomp->slurp; my %hash; for (0..$#words) { my $word = shift @words; $hash{$word} = [distance($word, @words)]; push @words, $word; } print Dumper \%hash; __END__ $ perl test.pl words.txt $VAR1 = { 'bar' => [ 3, 3 ], 'four' => [ 2, 3 ], 'foo' => [ 3, 2 ] }; __DATA__ $ cat words.txt four foo bar #### #!/usr/bin/perl use strict; use IO::All; use warnings; use Data::Dumper; use Text::Levenshtein qw(distance); my @words = io($ARGV[0])->chomp->slurp; my %HoH; for (0..$#words) { my $word = shift @words; my @distances = distance($word, @words); my %hash; @hash{@words} = @distances; $HoH{$word} = \%hash; push @words, $word; } print Dumper \%HoH; __END__ $ perl test.pl words.txt $VAR1 = { 'foo' => { 'bar' => 3, 'four' => 2 }, 'bar' => { 'four' => 3, 'foo' => 3 }, 'four' => { 'bar' => 3, 'foo' => 2 } };