Borrowing
tachyon's example, and leaving out the rle function definition for brevity, many examples of which can be borrowed and modified from
here (This solution is probably better if you were going to look for many letter lists as opposed to just one):
@dict = qw (foo oof fff bar baz);
$letters = 'ofo';
my %dict;
push @{$dict{rle(sort split '',$_)}}, $_ for @dict;
$words = $dict{rle(sort split '',$letters)} || [];
print "$_\n" for @$words;
Update: Realized you don't actually need the rle function:
my %dict;
push @{$dict{join('', sort split '',$_)}}, $_ for @dict;
$words = $dict{join('', sort split '',$letters)} || [];
print "$_\n" for @$words;