c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @dict = ('???', qw(a abbey zymophore zymophoric)); ;; my %encode = map { $dict[$_] => $_ } 0 .. $#dict; dd \%encode; ;; chomp(my $sentence = ); print qq{sentence: '$sentence'}; my @words = split ' ', lc $sentence; dd \@words; ;; my @encoding = map { $encode{ exists $encode{$_} ? $_ : '???' } } @words; dd \@encoding; ;; my @decoding = @dict[ @encoding ]; dd \@decoding; " { "???" => 0, "a" => 1, "abbey" => 2, "zymophore" => 3, "zymophoric" => 4 } a crumbling zymophoric abbey sentence: 'a crumbling zymophoric abbey' ["a", "crumbling", "zymophoric", "abbey"] [1, 0, 4, 2] ["a", "???", "zymophoric", "abbey"]