#!/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