#!/usr/bin/perl use strict; use warnings; my %words; while (<>) { chomp($_ = lc); for (/\b\w+(?:'\w+)?\b/g) { next unless length > 3; my $order = join "", sort split //; $words{substr($_, 0, 1) . substr($_, -1, 1)}{$order}{$_} = 1; } } for my $k (sort keys %words) { my @multi = grep keys %{ $words{$k}{$_} } > 1, keys %{ $words{$k} } or next; print "$k\n"; for my $o (sort @multi) { my $w = $words{$k}{$o}; print " $o (" . keys(%$w) . ") @{[ keys %$w ]}\n"; } }